我得到了一個包含像這樣的電影名稱的串列
Film Name - Film.information.lanugage.2160p.more.info
Film Name - Film.info.information.1080p.more.info
Film Name - Film.information.lanugage.1080p.information.info
Film Name - Film.information.more.720p.more.info
Film Name - Film.more.lanugage.2160p.more.info
我正在使用grep '[0-9][0-9][0-9][0-9]p' list.txt > resolution.txt 過濾解析度。我將搜索一個 sed cmd 來洗掉所有包含和過去的內容-
應該看起來像這樣我想
sed 's/-.*$//g' list.txt > cleanList.txt
之后我想將resolution.txt中的解析度添加到cleanList.txt中的行尾
最終檔案應如下所示
Film Name 2160p
Film Name 1080p
Film Name 1080p
Film Name 720p
Film Name 2160p
uj5u.com熱心網友回復:
您可以使用
sed -E 's/(.*) - (.*[^0-9])?((480|720|1080|1440|2160|4320)p?)([^0-9].*)?/\1 \3/' list.txt > output.txt
詳情:
(.*)- 匹配并捕獲盡可能多的任何字符到組 1-- 空格-空格(.*[^0-9])?- 第 2 組(可選):任何文本,然后是非數字字符((480|720|1080|1440|2160|4320)p?)- 第 3 組:任何常見的解析度值(在第 4 組中),然后是一個可選的p([^0-9].*)?- 第 5 組(可選):一個非數字字符,然后是任何文本。
的\1 \2替換替換組1 空間 2個值匹配線。
請參閱在線演示:
#!/bin/bash
s='Film Name - Film.information.lanugage.2160p.more.info
Film Name - name name - Film.info.information.1080p.more.info
Star Wars - Episode V - Das Imperium schl?gt zurück - Star.Wars.Episode.V.Das.Imperium.schlaegt.zurueck.1980.German.DL.2160p.UHD.BluRay.x265-ENDSTATiON
Film Name - Film.information.lanugage.1080p.information.info
Film Name - asfasfaf - Film.information.more.720p.more.info
Film Name - Film.more.lanugage.2160p.more.info
Boss Baby - Schluss mit Kindergarten - pso-bossbaby2_bd.1080p
Sicario 2 - encounters-si2so_1080p
Skyscraper - encounters-skyscraper_1080p
Unsere Zeit ist jetzt - roor-unserezeit-1080p
Schindlers Liste - d-schindlersliste-1080p
South Park: Der Film – gr??er, l?nger, ungeschnitten - in-southpark1080p
Ein Hund namens Palma - rf-ehnp2021.1080
Taxi Driver (1976) - d-taxidriver-1080p
The Taking of Deborah Logan - The.Taking.of.Deborah.Logan.2014.LIMITED.1080p.BluRay.X264-CADAVER
Die Feuerzangenbowle 1944 - d-feuerzangenbowle-1080p
Hooligans - rsg-hooligans-1080p
Gest?ndnisse - Confessions - wombat-gestaendnisse-1080p
Greyhound - greyhound.2020.german.dl.1080p.web.h264-wayne'
sed -E 's/(.*) - (.*[^0-9])?((480|720|1080|1440|2160|4320)p?)([^0-9].*)?/\1 \3/' <<< "$s"
輸出:
Film Name 2160p
Film Name - name name 1080p
Star Wars - Episode V - Das Imperium schl?gt zurück 2160p
Film Name 1080p
Film Name - asfasfaf 720p
Film Name 2160p
Boss Baby - Schluss mit Kindergarten 1080p
Sicario 2 1080p
Skyscraper 1080p
Unsere Zeit ist jetzt 1080p
Schindlers Liste 1080p
South Park: Der Film – gr??er, l?nger, ungeschnitten 1080p
Ein Hund namens Palma 1080
Taxi Driver (1976) 1080p
The Taking of Deborah Logan 1080p
Die Feuerzangenbowle 1944 1080p
Hooligans 1080p
Gest?ndnisse - Confessions 1080p
Greyhound 1080p
uj5u.com熱心網友回復:
我建議您awk一次性使用which 為您提供更清潔的解決方案,而不是使用grepand sed。
嘗試:
awk -F" - " '{match($2, "[0-9] p"); print $1, substr ($2, RSTART, RLENGTH)}' list.txt > cleanList.txt
我使用字串" - "作為每個輸入行之間$1和$2上的欄位分隔符。
該功能match()會尋找對應的數字正則運算式的一些后置的p內部$2。此函式設定變數RSTART并RLENGTH以適合函式的substr()方式提取匹配的模式并列印它。
uj5u.com熱心網友回復:
您可以使用管道“|” 運算元將一個命令的輸出作為第二個命令的輸入傳遞。例如:
grep '[0-9][0-9][0-9][0-9]p' list.txt | sed 's/-.*$//g' list.txt > cleanList.txt
如果要將第一個的輸出保存到檔案并與第二個一起處理,則應使用命令 tee (tree) 將相同的輸出寫入兩者。示例:grep '...' list.txt | 三通解析度.txt | sed '...' > cleanList.txt
請參閱:https : //www.geeksforgeeks.org/tee-command-linux-example/如何將輸出重定向到檔案和標準輸出 管道在 Linux 中如何作業?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378749.html
