簡體   English   中英

使用sed,在文本文件中標識右行,並將三個不同的部分寫入以分隔變量

[英]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 #
  • 如果行匹配,那么我們將執行以下操作:
    • #2s/// )用正則表達式替換其內容
    • #3p )打印結果
    • #4q )停止處理文件,因為我們已經找到了要查找的內容

暫無
暫無

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

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