簡體   English   中英

為什么此正則表達式不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM