2017-07-26 14 views
-1

我有一個文件,它有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]" 

但文件中沒有變化。

+0

如果線路具體爲,則正則表達式爲'密碼必要pam_deny.so'。如果這條線可以是其他的東西,那麼你還沒有完全指定這條線可能是什麼。 – slebetman

+0

這條線是唯一的,但有這麼多的空白。其他行如下:密碼必需pam_pwd.so –

+0

@priyankaraut除了更清楚地定義你的問題是什麼,它是非常有用的,如果你顯示你到目前爲止嘗試過哪些正則表達式。 – John1024

回答

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 
+0

如何將#附加到特定行? –

+0

你的意思是prepend,對吧? – hek2mgl

+0

是的。但這不是我的第一行文件,一些描述也在那裏。 –

0
grep -n "password requisite   pam_deny.so" 

人grep的狀態

-n,--line數 前綴與它的輸入文件中的基於1的行號輸出的每一行。 (-n是由POSIX指定。)

相關問題