仅适用于SED中包含4个单词的行

问题描述 投票:0回答:2

如何处理SED中只有4个单词的行?

这就是我设法做的,但它不起作用:

sed -e '/[ ]*[^ ]+[ ]*[^ ]+[ ]*[^ ]+[ ]*[^ ]+[ ]*/!d' -e 'other commands...' fileName
regex unix sed
2个回答
1
投票

这应该是便携的:

sed -n '
/^[[:blank:]]*\([[:alpha:]]\{1,\}[[:blank:]]\{1,\}\)\{3\}[[:alpha:]]\{1,\}[[:blank:]]*$/ {

    # capture the 1st word of every 4 word line and print it 3 times
    s/^[[:blank:]]*\([[:alpha:]]\{1,\}\).*/\1 \1 \1/
    p

}
' > temp-file

0
投票

AWK可能是您的任务更容易的工具。使用awk内置变量NF检查一行中的字段数是否等于4。

awk 'NF==4' filename

将是一个很好的起点。如果您希望将更改写入文件,可以使用GNU AWK的inplace edit选项,如下所示

gawk -i inplace 'NF==4' filename
© www.soinside.com 2019 - 2024. All rights reserved.