正则表达式在文件中特定行的开头添加字符

时间:2017-07-26 05:16:16

标签: regex linux bash shell

我有一个文件有n行,但我想只找到一行并编辑它而不在屏幕上打印文件内容。文件是动态创建的,因此我无法计算空间和所有空间。所以我想为此使用RegEx。

我的档案是:

hey             retry=3
hello           so
password        so

我想把它作为:

#hey   retry=3
hello  so
password so

我尝试了所有这些:

sed 's/password[ \t]+requisite[ \t]+pam_pwquality.so/s/^/#/' test1

x='/password[ \t]+requisite[ \t]+pam_pwquality.so/' 
sed -i -e "s/\($x\)/#\1/" test1

re="^[password][[ :blank: ]]*[requisite][[ :blank:]]*[pam_pwquality.so][[ :blank:]]*[retry=3]"

但文件没有变化。

2 个答案:

答案 0 :(得分:0)

grep -n "password    requisite           pam_deny.so"

man grep states

-n, - line-number               在输入文件中使用基于1的行号为每行输出添加前缀。 (-n由POSIX指定。)

答案 1 :(得分:0)

我会使用awk

awk '$1=="password" && $2=="requisite" && $3=="pam_deny.so" {
       $0="#"$0
     }1' file

awk将行拆分为由一个或多个空白字符(包括制表符)分隔的字段。这使得检查各个字段的内容变得简单。

使用gawk,您可以更改文件:

gawk -i inplace '$1=="password" && $2=="requisite" && $3=="pam_deny.so"
{ 
    $0="#"$0
}1' file