sed - 查找某个符号后是否有任何内容

时间:2017-10-24 09:26:18

标签: bash awk sed grep

假设我在文件中有一个键和值列表,如下所示:

name=james
age=20
city=

如何检查此列表中没有值的键(即" city")以及' ='之后是否有任何内容。签名,在行的开头添加一个哈希值?

name=james
age=20
#city=

6 个答案:

答案 0 :(得分:2)

您可以使用以下命令:

sed 's/^[^=]\{1,\}=[[:space:]]*$/#&/' file

说明:

s命令表示替换,其工作方式如下:

s/search/replace/[optional options]

上述模式的工作原理如下:

搜索

^            Begin of line
[^=]\{1,\}   1 or more non = characters
=            The =
[[:space:]]* Optional space before the end of the line
$            The end of the line

替换

#            The #
&            The match from the above search

如果您想更改文件,请检查:sed in-place flag that works both on Mac (BSD) and Linux

答案 1 :(得分:1)

使用 awk

awk -v FS="" '$NF=="="{$0="#"$0}1'

如果最后一个字段为=,则前置#

OR

awk -v FS="=" '$2==""{$0="#"$0}1'

如果第二个字段$2null,则前缀为#

输出:

name=james
age=20
#city=

答案 2 :(得分:0)

以下awk应该可以帮助你。

awk -F"=" '{printf("%s\n",NF>1 && $2?$0:"#"$0)}'  Input_file

答案 3 :(得分:0)

使用awk

awk -F'=' '$2==""{sub(/^/,"#")}1' infile

#OR

awk -F'=' '$2==""{print "#" $0;next}1' infile

#OR

awk -F'=' '{print ($2==""?"#":"") $0}' infile

测试结果:

$ cat infile
name=james
age=20
city=

$ awk -F'=' '$2==""{print "#" $0;next}1' infile
name=james
age=20
#city=

$ awk -F'=' '{print ($2==""?"#":"") $0}' infile
name=james
age=20
#city=

$ awk -F'=' '$2==""{sub(/^/,"#")}1' infile
name=james
age=20
#city=

答案 4 :(得分:0)

你可以试试

cat myfile| sed 's/\(.*.=\s*$\)/#\1/'

答案 5 :(得分:0)

再多一次awk

awk -F= '!$2{$0="#"$0}1' infile