我的任务是使用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
这不起作用,我无法弄清楚原因。谁能帮帮我吗? 谢谢!
答案 0 :(得分:1)
$ 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
选项^
线锚起点(\S+\s+)
定义一列 - 非空格字符后跟空格字符