[英]Why doesn't this regex work?
正則表達式:
^ *x *\=.*$
意思是“匹配一個文字x,其后是任意數量的空格,然后是任意數量的空格,然后是等號,然后是行尾的所有內容。” Sed的調用方式為:
sed -r -e 's|^ *x *\=.*$||g' file
盡管找到了,但它找不到單個匹配項。 正則表達式有什么問題?
致所有人:感謝您的回答和努力! 看來問題出在輸入文件中的制表符中,空格說明符'
”。 但是,無論當前使用哪個選項卡,都可以使用\\s
解決方案!
^\s*x\s*=.*$
也許您必須逃脫一些字符,一一找出。
順便說一句:正則表達式標簽確實應該具有三個要求:
什么是輸入字符串,什么是輸出字符串以及您的平台/語言。
或'^[ ]*x[ ]*='
。 它兼容性更高,但不會與制表符等匹配。 而且,如果您不需要分組,為什么還要打擾其余的行呢?
sed
逐行處理文件,並為每個文件執行給定的程序。 滿足您需求的最簡單程序是
sed -re '/^ *x *=.*$/!d' file
/^ *x *=.*$/
”選擇與模式匹配的每一行。 !
”取反結果。 d
”刪除該行。 除非另有說明,否則sed
默認情況下將打印所有行。 這樣可以有效地打印與圖案匹配的線。
一種替代的編寫方式是:
sed -rne '/^ *x *=.*$/p' file
/^ *x *=.*$/
”選擇與模式匹配的每一行。 p
”打印行。 此處的區別在於,我使用“ -n
”開關禁止自動打印行,而是僅打印我選擇的行。
您也可以使用“ grep
”執行此任務:
grep -E '^ *x *=.*$' file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.