我的任务是使用 sed
交换文件中的第二列和第四列:
Filesystem Size Used Avail Use% Mounted on
rootfs 583G 380G 203G 66% /
devtmpfs 1.9G 252K 1.9G 1% /dev
tmpfs 2.0G 2.5M 1.9G 1% /dev/shm
/dev/sda1 583G 380G 203G 66% /
我的 sed
脚本如下所示:
#!/bin/sed -f
s/\(.*\)\s\+\(.*\)\s\+\(.*\)\s\+\(.*\)\s\+\(.*\)\s\+\(.*\)/\1 \3 \4 \2 \5 \6/g
这不起作用,我不明白为什么。谁能帮帮我吗? 谢谢!
最佳答案
$ sed -E 's/^(\S+\s+)(\S+\s+)(\S+\s+)(\S+\s+)/\1\4\3\2/' ip.txt
Filesystem Avail Used Size Use% Mounted on
rootfs 203G 380G 583G 66% /
devtmpfs 1.9G 252K 1.9G 1% /dev
tmpfs 1.9G 2.5M 2.0G 1% /dev/shm
/dev/sda1 203G 380G 583G 66% /
-E
使用 ERE,一些sed
版本需要-r
选项来代替^
行 anchor 开始(\S+\s+)
定义一列 - 非空白字符后跟空白字符- 使用它四次以获得前四列
- 然后在替换部分,按需要的顺序重新排列
关于regex - 使用 sed linux 交换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232051/