Shell 使用SED交换一行中出现的多个字和数字
我有一个大文件,其中每一行都显示:Shell 使用SED交换一行中出现的多个字和数字,shell,sed,scripting,Shell,Sed,Scripting,我有一个大文件,其中每一行都显示: OCCUPY 12 EVERY PIC 32(12) OCCUPY 45 EVERY PIC X(21) OCCUPY 98 EVERY PIC F(A0) OCCUPY 21 EVERY PIC T(BC) 所需输出应为: PIC 32(12) OCCUPY 12 EVERY PIC X(21) OCCUPY 45 EVERY PIC F(A0) OCCUPY 98 EVERY 等等 所以,这只是一个例子,但是在文件中,有很多行在PIC附近有不同的
OCCUPY 12 EVERY PIC 32(12)
OCCUPY 45 EVERY PIC X(21)
OCCUPY 98 EVERY PIC F(A0)
OCCUPY 21 EVERY PIC T(BC)
所需输出应为:
PIC 32(12) OCCUPY 12 EVERY
PIC X(21) OCCUPY 45 EVERY
PIC F(A0) OCCUPY 98 EVERY
等等
所以,这只是一个例子,但是在文件中,有很多行在PIC附近有不同的字符/数字,在account附近有不同的数字
到目前为止,我尝试执行:
sed -E 's/(.*OCCUPY\ )(0([A-Z]\([0-9])\)(.*EVERY\ )(.*PIC\ )(([0-9]\([0-9]+\))/\3\4\1\2/'
但是,这没有帮助
我将感谢任何帮助 从您的示例判断,您的sed命令似乎太复杂了。这个简单的版本怎么样
sed 's/\(.*\) \(PIC .*\)/\2 \1/'
[更新]你的台词比你在帖子中说的要复杂。它们是:
MS-MSG OCCUPY 12 EVERY PIC 32(12) 0012345
你想要:
PIC 32(12) OCCUPY 12 EVERY
然后,您所要做的就是将这些额外的字符添加到替换命令的左侧,但在括号(其内容用于构建新字符串)之外:
如果您的数据在
d
文件中,请在gnu上试用:
sed -E 's/^(OCCUPY.+EVERY).+(PIC \S+)/\2 \1/' d
此命令仅适用于d文件?我想在我的档案里试试这个。例如,如果我有“MS-MSG占据12每一个PIC 32(12)0012345”?用您的文件名替换
d
。谢谢您的回复,您能帮我吗。。如果我在开头和结尾都有单词和数字,我该怎么做?例如:“MS-MSG占领12每一张图片32(12)0012345”我试过“sed-r/(占领[0-9]+)(每一张+)(PIC[A-Z]([A-Z][0-9])+)/\3\1\2/”,但没用谢谢你的回复,我只是看到了而已!。绝对有帮助!!我试着使用你的脚本,但是在一些行中,单词正在分裂,脚本并没有因此而改变:occube 12 EVERY PIC 32(12)
所以,occube 12 EVERY在一行中,PIC 32(12)在下面一行中……你知道如何改变吗?谢谢你的帮助!!我不确定您的意思是输入行被拆分为两行(我的脚本还没有准备好),还是我的脚本正在拆分行(我不明白为什么会这样)。无论如何,我想你应该问另一个关于S.O.的问题,给出输入、实际输出和期望输出的全部细节。
sed 's/.* \(OCCUPY .*\) \(PIC [^ ]*\).*/\2 \1/'
sed -E 's/^(OCCUPY.+EVERY).+(PIC \S+)/\2 \1/' d