Bash
使用 sed 修改目錄中的所有文件並相應地命名輸出
我希望 sed 命令處理目錄中的所有文件並將結果輸出到一個新文件中。如果 f 是 val1.txt,則輸出文件的名稱應該是 val1_ended.txt - 這是我試圖用 echo 和 sed 做的,但它不起作用。任何幫助,將不勝感激。謝謝!
files= ls *.txt echo "${files}" for f in ${files}$ do echo $f sed -n -e 's/Trial End/&/p' $f>` echo $f | sed 's/.txt$/_ended.txt/g' ` done
在我的輸入文件中,行如下:
3413476 999.3 549.3 1876.0 32768.0 3413477 1000.7 549.6 1880.0 32768.0 3413478 999.3 551.1 1875.0 32768.0 INPUT 3413485 127 END 3413485 SAMPLES EVENTS RES 59.84 45.82 MSG 3413491 Trial End 2 MSG 3414099 RECCFG CR 1000 0 0 R
在輸出中,我想要找到“試用結束”模式的所有行:
MSG 3411256 Trial End 1 MSG 3413491 Trial End 2 MSG 3415678 Trial End 3 MSG 3417842 Trial End 4 MSG 3420114 Trial End 5
for file in *.txt; do grep 'Trial End' "$file" >> "${file%.txt}_ended.txt" done
我正在使用
>>
而不是>
僅以防萬一任何*_ended.txt
文件已經存在->>
將附加到文件而不是截斷和覆蓋它。另一件事是它不是很可重用。如果您已經執行過一次,那麼您將擁有與模式匹配
filename_ended.txt
並得到處理的文件,並且您將擁有文件。filename_ended_ended.txt
您最好為這些文件使用另一個副檔名,以防止將來出現這種潛在的麻煩(順便說一下,副檔名在 Unix 世界中並不重要)。
for file in *.txt; do grep 'Trial End' "$file" >> "$file.ended"; done