regex - 使用 sed linux 交换列

标签 regex linux sed text-files

我的任务是使用 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/

相关文章:

正则表达式——仅 grep 字母字符

linux - 我可以假设安装了 bash

c - 在 Linux 内核模块中重新计算 TCP 校验和

java - Linux 上的符号链接(symbolic link)后面的 Tomcat 缓存文件

regex - 使用 sed 删除前导空格

linux - 目录名称 - 去除空格和其他格式

linux - 如何在linux中减去两个文件

Java - 使用多正则表达式从字符串中提取 JSON 值

javascript - 在 javascript 中以 mm/dd/yyyy 格式验证短日期和长日期的正则表达式

regex - Shell 脚本 - sed 不起作用