用分号解释bash SED命令
这个sed命令在做什么?有没有像regex这样的在线工具用分号解释bash SED命令,sed,Sed,这个sed命令在做什么?有没有像regex这样的在线工具 sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt 我认为在开始时,它会在行尾添加csv a类型、b类型、c类型,但命令的其余部分也会做什么呢?我不知道有任何这样的实用程序,但让我使用文本编辑器解释一下: sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt
sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt
我认为在开始时,它会在行尾添加csv a类型、b类型、c类型,但命令的其余部分也会做什么呢?我不知道有任何这样的实用程序,但让我使用文本编辑器解释一下:
sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt
^ ^ ^ ^ ^^ ^^ ^
| | | | || || |
modify | End Non-empty || || input
the | of lines || |Negation, file
file | line only || |i.e. lines 2,3,...
in | || |
place | || First
First line Negation, i.e.| line
empty lines only|
Branch to
script end,
i.e. skip the rest
换句话说,它将|,a类型,b类型,c类型
添加到第一行,不更改空行,并将|,,,
添加到所有剩余行
sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt
可以写成
sed -i '
1 s/$/|,a Type,b Type,c Type/
/./! b
1! s/$/|,,,/
' textflile.txt
info sed
包含完整的sed手册。这并不能回答您的问题,但重要的是让人们知道,它需要比注释更多的空间和格式,因此:仅供参考,以执行sed脚本的功能,即
it adds |,a type, b Type,c Type to the first line,
doesn't change empty lines,
and adds |,,, to all the remaining lines.
在awk中就是这样:
awk '
NR==1 { print $0 "|,a type, b Type,c Type"; next }
!NF { print }
NF { print $0 "|,,," }
'
或者,如果您熟悉三元表达式并希望删除冗余代码:
awk '{
sfx = "|," (NR==1 ? "a type, b Type,c Type" : ",,")
print $0 (NF ? sfx : "")
}'
这就是为什么我总是说,
sed代表s/old/new,仅此而已。使用sed做任何其他事情,你都会得到这样一个神秘的咒语,通常一个月后,甚至作者都无法理解,当需求发生变化时,也没有人能够建立在这个咒语之上。发布一些示例输入和运行该脚本后得到的输出,我希望有人能向您展示如何使用清晰、简单、可移植、高效的awk脚本执行相同的操作。也许会有帮助。但那到底有什么作用?@埃德默顿:更新。哇。这么简单的任务需要这么复杂的脚本。谢谢