簡體   English   中英

如何讓我的 Perl 單行只顯示文件中的第一個正則表達式匹配?

[英]How can I get my Perl one-liner to show only the first regex match in the file?

我有一個這種格式的文件:

KEY1="VALUE1"
KEY2="VALUE2"
KEY1="VALUE2"

我需要一個 perl 命令來僅獲取KEY1的第一次出現,即VALUE1

我正在使用這個命令:

perl -ne 'print "$1" if /KEY1="(.*?)"/' myfile

但結果是:

VALUE1VALUE2

EDIT

解決辦法必須用 perl 命令,因為系統沒有其他的正則表達式工具。

像這樣添加and last到您的單行中(刪除了額外的引號):

perl -ne 'print $1 and last if /KEY1="(.*?)"/' myfile

這是因為-n開關有效地將您的代碼包裝在一個while循環中。 因此,如果模式匹配,則執行print ,它成功並因此導致last被執行。 這將退出while循環。

您還可以使用更詳細的last LINE ,它指定遍歷輸入行的while循環的(隱式)label。 最后一種形式對於比這里更復雜的代碼很有用,例如涉及嵌套循環的代碼。

您可以在打印第一場比賽后退出:

perl -ne '/KEY1="([^"]*)"/ && print ($1 . "\n") && exit' file

VALUE1

您還可以使用sed

sed -nE 's/^KEY1="(.*)"/\1/p;q' file

p;q表示“打印”然后“退出”

僅用於注冊,感謝@Andy Lester的評論,我還找到了一種簡單的方法來解決grepcut的問題,而不需要正則表達式:

grep -a -m1 'KEY1' file | cut -d "\"" -f2

返回

VALUE1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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