![](/img/trans.png)
[英]Using sed, write portions of the line below a specific string to two different variables
[英]Using sed, identify the right line in text file and write three different portions to separate variables
我有一組文本文件,每個文本文件在某處包含以下行的一個實例,其中“(MR#”是識別右行的最佳方法...
Smith, John A (MR # MR123456)
我想獲得三個sed語句,當它們針對給定文件運行時,將填充以下三個變量:Plname,Pfname和MRnum。 使用上面的示例,我希望變量在運行sed語句后最終保留以下內容。
Plname=Smith
Pfname=John
MRnum=MR123456
盡管有許多sed示例,但我對此並不陌生,並且目前在使用確切的語法。 謝謝你的幫助。
像這樣:
$ cat t
bla-bla-bla
Smith, John A (MR # MR123456)
bla-bla-bla
$ Plname="$(sed -n '/(MR #/{s/^\([^,]\+\),.*/\1/p;q}' t)"
$ Pfname="$(sed -n '/(MR #/{s/^[^,]\+,[ ]\?\([^(]\+\).*/\1/p;q}' t)"
$ MRnum="$(sed -n '/(MR #/{s/^[^(]\+(MR # \([^)]\+\).*/\1/p;q}' t)"
$ printf "Plname = %s, Pfname = %s, MRnum = %s\n" "$Plname" "$Pfname" "$MRnum"
Plname = Smith, Pfname = John A , MRnum = MR123456
小解釋:
/(MR #/{s/^\\([^,]\\+\\),.*/\\1/p;q}
是
/(MR #/ #1 { s/^\\([^,]\\+\\),.*/\\1/; #2 p; #3 q #4 }
sed
將逐行解析文件 -n
標志表示sed
不會打印每行(默認情況下會打印),因為如果需要,我們將手動執行此操作 #1
( //
)查找包含(MR #
#2
( s///
)用正則表達式替換其內容 #3
( p
)打印結果 #4
( q
)停止處理文件,因為我們已經找到了要查找的內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.