首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符前后交换文本

在字符前后交换文本
EN

Unix & Linux用户
提问于 2019-06-24 12:48:46
回答 2查看 204关注 0票数 1

我有一个包含以下等式的大型文本文件code.txt

代码语言:javascript
复制
        oReservist.Role = Sheets("RECAP").Cells(ligne, 2)
        oReservist.Surname = Sheets("RECAP").Cells(ligne, 3)
        oReservist.Name = Sheets("RECAP").Cells(ligne, 4)
        ...

我想把平等的第一部分改为第二部分,第二部分是第一部分。这就是说:

代码语言:javascript
复制
        Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
        Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
        Sheets("RECAP").Cells(ligne, 4) = oReservist.Name 
        ...

我该怎么处理呢?到目前为止,我只能删除之前和之后的部分:

代码语言:javascript
复制
sed 's/.*=.*//' file
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-06-24 12:58:08

使用awk" = "作为字段分隔符,然后简单地旋转字段。

代码语言:javascript
复制
awk -F " = " '{OFS=FS;print $2,$1}' file

或者使用sed

代码语言:javascript
复制
sed 's/\(.*\) = \(.*\)/\2 = \1/' file

(使用捕获组\(...\)并以\1\2替换字符串调用它们)

这两种方法都不会消除行首的制表符或空白。

输出:

代码语言:javascript
复制
Sheets("RECAP").Cells(ligne, 2) =         oReservist.Role
Sheets("RECAP").Cells(ligne, 3) =         oReservist.Surname
Sheets("RECAP").Cells(ligne, 4) =         oReservist.Name

为了留住它们,你可以以某种方式捕捉它们,例如:

代码语言:javascript
复制
sed 's/\([[:blank:]]*\)\(.*\) = \(.*\)/\1\3 = \2/' file

或者省略第一次捕获中的空白:

代码语言:javascript
复制
sed 's/\([^[:blank:]]*\) = \(.*\)/\2 = \1/' file

输出:

代码语言:javascript
复制
        Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
        Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
        Sheets("RECAP").Cells(ligne, 4) = oReservist.Name
票数 4
EN

Unix & Linux用户

发布于 2019-06-24 18:15:00

尝试使用以下2种方法

python

代码语言:javascript
复制
#!/usr/bin/python
m=open('filename','r')
for i in m:
    k=i.strip().split('=')
    fi=k[1]
        la=k[0]
        print "{0}={1}".format(fi,la)

输出

代码语言:javascript
复制
Sheets("RECAP").Cells(ligne, 2)=oReservist.Role 
 Sheets("RECAP").Cells(ligne, 3)=oReservist.Surname 
 Sheets("RECAP").Cells(ligne, 4)=oReservist.Name 

Method2

代码语言:javascript
复制
awk -F "=" '{print $2"="$1}' y.txt|sed -r "s/\s+//g" 

Sheets("RECAP").Cells(ligne,2)=oReservist.Role
Sheets("RECAP").Cells(ligne,3)=oReservist.Surname
Sheets("RECAP").Cells(ligne,4)=oReservist.Name

praveen@praveen:~$

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/526606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档