我有一個包含來自人們的個人資料的文本檔案。
BEGIN:VCARD
FN:Rene van der Harten
N:van der Harten;Rene;J.;Sir;R.D.O.N.
SORT-STRING:Harten
END:VCARD
BEGIN:VCARD
FN:Robert Pau Shou Chang
N:Pau;Shou Chang;Robert
SORT-STRING:Pau
END:VCARD
BEGIN:VCARD
FN:Osamu Koura
N:Koura;Osamu
SORT-STRING:Koura
END:VCARD
我只想按字母順序對姓氏進行排序。我試過了
grep N: <filename>
過濾以 N: 開頭的行,但它不起作用。
uj5u.com熱心網友回復:
問題是 grep 將嘗試匹配每行中的任何位置,而不僅僅是從頭開始,N:匹配包含的所有行N:您可以使用^錨點將模式錨定到行首:
$ grep '^N:' <filename>
如果您只想提取第一個:和第一個之間的文本,;那么您可能需要選擇 AWK:
$ awk -F'[;:]' ' $1 == "N" { print $2 }' <filename>
van der Harten
Pau
Koura
它的作業方式是,將AWK輸入字串分割成田,并選擇-F指定的欄位將被劈裂:和;。使第一個欄位 ( $1) 相等N,第二個欄位為姓氏。
uj5u.com熱心網友回復:
如您所見,您需要做兩件事:
grep "^N\:" test.txt | sort -t ":" -k 2
首先,您過濾行,從N::
^N : means that the line must start with capital 'N'
\: : means that next to that first 'N' you must have a semicolon.
The backslash is meant to explain to "grep" this is not a range separator
其次,您對第二列進行排序:
-t ":" : means that the semicolon is the fields separator
-k 2 : means you need to sort on the second column
uj5u.com熱心網友回復:
您需要N:在行首指定您想要的:
grep ^N: <filename>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/406196.html
標籤:
