[英]How can I write a sed, awk or other regex one-liner to concatenate contiguous lines beginning with match?
[英]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的評論,我還找到了一種簡單的方法來解決grep
和cut
的問題,而不需要正則表達式:
grep -a -m1 'KEY1' file | cut -d "\"" -f2
返回
VALUE1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.