假设我在文件中有一个键和值列表,如下所示:
name=james
age=20
city=
如何检查此列表中没有值的键(即" city")以及' ='之后是否有任何内容。签名,在行的开头添加一个哈希值?
name=james
age=20
#city=
答案 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'
如果第二个字段$2
为null
,则前缀为#
输出:
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