【发布时间】:2019-09-12 02:43:50
【问题描述】:
我只需要使用 sed 在特定字符串“PIC”之后交换每一行中的数值。 例如:
hello PIC A(12), and this PIC B(11)
想要的输出是:
hello PIC B(11), and this PIC A(12)
字符“B”和“A”在其他行中可能不同,但字符串 PIC 始终存在。
我正在尝试使用 sed 命令:
echo "hello PIC A(12), and this PIC B(11)" | sed '/PIC X(12)/s/PIC X(12)/PIC X(11)/g'
但似乎无法正常工作。
感谢所有回复。
【问题讨论】:
-
12是固定值吗?如果没有,请尝试sed -E 's/(PIC )([A-Z]\([0-9]+\))(.*PIC )([A-Z]\([0-9]+\))/\1\4\3\2/' -
太棒了!这是工作!所以,在文件中有很多行,长度不同,但总是有 PIC A(
) 值,所以你的代码似乎改变了一切。 !谢谢@WiktorStribiżew !!! -
我可以知道您使用 sed 命令在哪里学到的吗?我面临很多需要使用此工具的情况。谢谢@WiktorStribiżew
-
我已经使用 Linux 快两年了,我几乎所有的
sed知识都来自 SO 和相关网站。按照标签,尝试回答问题,即使您不发布它们也会学到很多东西。在sed不够或者太麻烦的地方,我改用 Perl。awk已被证明是一个不错的选择,当字符串可以被视为一些分隔符分隔的字符串时。 -
@Sunny,fwiw,我刚刚写了一个 sed 教程和参考 here。欢迎您的反馈!