[英]Grep/Sed/Awk Options
您如何grep或使用sed或awk解析動態長度子字符串? 這里有些例子:
我需要解析這些字符串中除“ XXXXX.WAV”以外的所有內容,但是這些字符串不是設置的長度。
有時是這樣的:
{"filename": "/assets/JFM/imaging/19001.WAV"},
{"filename": "/assets/JFM/imaging/19307.WAV"},
{"filename": "/assets/JFM/imaging/19002.WAV"}
有時像這樣:
{"filename": "/assets/JFM/LN_405999/101.WAV"},
{"filename": "/assets/JFM/LN_405999/102.WAV"},
{"filename": "/assets/JFM/LN_405999/103.WAV"}
是否有一種偉大的動態方法可以僅解析.WAV? 也許如果我從“ /”開始並解析到“?”
編輯:
預期的輸出是這樣的:
19001.WAV
19307.WAV
19002.WAV
要么:
101.WAV
101.WAV
103.WAV
只需按照注釋中的建議使用grep
:
grep -o '[^/]\{1,\}\.WAV' yourfile
如果wav文件始終包含數字,則這似乎更明確(結果相同):
grep -o '[0-9]\{1,\}\.WAV'
假設文件的開頭和結尾都有[
和]
行,則看起來您的輸入是JSON,在這種情況下,我建議您安裝並使用jq
而不是基於文本的實用程序,並執行以下操作:
jq -r '.[]|.filename|split("/")[-1]'
否則,列出的任何工具都可以正常工作。
grep -o '[^/]*\.WAV'
要么
sed -ne 's,.*/\([^/]*\.WAV\).*$,\1,p'
要么
awk -F'"' '/WAV/ {split($4,a,"/"); print a[length(a)]}'
在每種情況下,還有多種其他可能的解決方案。
嘗試這個 -
awk -F'[{":}/]' '{print $(NF-2)}' f
19001.WAV
19307.WAV
19002.WAV
要么
egrep -o '[[:digit:]]{5}.WAV' f
19001.WAV
19307.WAV
19002.WAV
要么
egrep -o '[[:digit:]]{5}.[[:alpha:]]{3}' f
19001.WAV
19307.WAV
19002.WAV
您可以根據需要在egrep中使用不同的示例輕松更改數字和字符的值,但是awk在兩種情況下都可以正常工作。
或與sed
$ sed 's,.*/,,; s,".*,,' x
101.WAV
102.WAV
103.WAV
說明:
s,.*/,,
--刪除所有內容,包括最右邊的/
s,".*,,
-刪除從最左邊的"
到行尾的所有內容 您列出的所有程序都使用regex解析名稱,因此我將向您展示一個使用grep
的示例,它可能是這種情況下最基本的示例。
有兩個選項,具體取決於您在“ .wav”之前定義XXX部分的確切方式。
如您所指出的,選項1只是文件名,即最后一個斜杠之后的所有內容:
grep -hoi "[^/]\+\.WAV"
讀作為“除斜杠之外的任何字符”( [^/]
)至少重復一次( \\+
),然后是文字.WAV
( \\.WAV
)。
選項2是僅獲取擴展名之前的數字:
grep -hoi "[[:digit:]]\+\.WAV"
要么
grep -hoi "[0-9]\+\.WAV"
這些讀作“數字”( [[:digit:]]
和[0-9]
表示同一件事)至少重復一次( \\+
),然后是文字.WAV
( \\.WAV
)。
在所有情況下,我建議使用標志-h
, -o
, -i
,它們已串聯到單個選項-hoi
。 -h
從輸出中禁止文件名。 -o
使grep
僅輸出匹配的部分。 -i
使區分大小寫不敏感,因此擴展名應該改為.wav
而不是.WAV
,這樣就可以了。
同樣,在所有情況下,輸入取決於您。 您可以通過另一個程序將其插入
program | grep -hoi "[^/]\+\.WAV"
您可以使用stdin重定向從文件中獲取它:
grep -hoi "[^/]\+\.WAV" < somefile.txt
或者,您可以將文件名傳遞給grep
:
grep -hoi "[^/]\+\.WAV" somefile.txt
另一個awk
awk -F'[/"]' '{print $(NF-1)}' file
19001.WAV
19307.WAV
19002.WAV
awk -F/ '{print substr($5,1,7)}' file
101.WAV
102.WAV
103.WAV
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.