bash SED命令解释,用分号

时间:2018-09-27 15:30:15

标签: sed

此sed命令在做什么?并有任何在线工具可以对sed进行一些解释,例如regex吗?

sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt

我认为一开始它是在一行的末尾添加csv a类型,b类型,c类型,但是命令的其余部分也是什么

3 个答案:

答案 0 :(得分:2)

我不知道任何此类实用程序,但让我使用文本编辑器进行解释:

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 type, b Type,c Type添加到第一行,不更改空行,并且将|,,,添加到所有其余行。

答案 1 :(得分:2)

tree | grep _000

可以写为

grep
  1. 仅在第1行上,在行的末尾添加一些文本
  2. 如果该行为空(“匹配1个字符,不是”),则转到下一个“循环”(即,打印当前行并转到下一行)
  3. 在每行第1行以外的所有中,在行的末尾添加“ | ,,,”

因此,您似乎正在向CSV文件添加一些空白字段。

sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt 包含完整的sed手册。

答案 2 :(得分:0)

这不能回答您的问题,但对于人们而言,重要的是要知道并且比注释需要更多的空间和格式,以便:FYI执行sed脚本所做的@choroba says,即

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 : "")
}'