gpt4 book ai didi

linux - bash 合并文件中的行

转载 作者:太空狗 更新时间:2023-10-29 11:27:35 24 4
gpt4 key购买 nike

我想转换这个文本:

qa-ops01.mysite.com
/dev/mapper/sys-home 58G 26G 30G 47% /home
/dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /tmp
qa-ops02.mysite.com
/dev/mapper/sys-home 58G 26G 30G 47% /usr
/dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /var
qa-ops03.mysite.com
/dev/mapper/sys-home 58G 26G 30G 47% /lib
/dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /etc

这个:

qa-ops01.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /home
qa-ops01.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /tmp
qa-ops02.mysite.com /dev/mapper/sys-home 58G 26G 30G 47% /usr
qa-ops02.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /var
qa-ops03.mysite.com /dev/mapper/sys-home 58G 26G 30G 47% /lib
qa-ops03.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /etc

我用过

cat FILE |sed 'N;s/.com\n//'

有没有办法实现这个,或者我应该只写 If...Then...

谢谢大家的回答 :D(你总是给我看新东西 :D)

最佳答案

answer通过 potong几乎是正确的;它只处理一台服务器,而不是多台服务器,但所需的更改很小。

$ sed -e '/^[^ ]*$/{h;d;}' -e 'G; s/\(.*\)\n\(.*\)/\2 \1/' data
qa-ops01.mysite.com /dev/mapper/sys-home 58G 26G 30G 47% /home
qa-ops01.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /tmp
qa-ops02.mysite.com /dev/mapper/sys-home 58G 26G 30G 47% /usr
qa-ops02.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /var
qa-ops03.mysite.com /dev/mapper/sys-home 58G 26G 30G 47% /lib
qa-ops03.mysite.com /dev/mapper/sys-tmp 3.9G 2.3G 1.5G 61% /etc
$

脚本分为两部分,由两个 -e 选项标识。第一部分标识服务器名称;这些行不包含空格(因此 /^[^ ]*$/ 查找没有空格的行),并将该行复制到保留空间 (h) 和然后删除它 (d) 并继续下一行。脚本的第二部分仅在包含空格的行上运行。它在换行符 (G) 之后将保持空间的内容附加到模式空间;然后它将这一行拆分为“直到换行符的所有内容”和“换行符之后的所有内容”,并切换它们以便“之后”(\2) 先出现,然后是空格,然后是“之前”(\1)。

这使用经典的 sed 正则表达式;它在 Mac OS X (10.7.5) 上使用 BSD sed 和 GNU sed 进行了测试,没有任何变化。 GNU sed 具有诸如 -r 之类的选项来更改正则表达式的解释,这将为您节省一些反斜杠。

关于linux - bash 合并文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com