Re: [問題]問sed的問題
y※ 引述《allstarschh (allstars)》之銘言:
: 1. 想用sed來改某directory 下的所有檔案
: 不過不確定 find如何跟 sed使用
: 例如 說 dir/下 把每個檔名的最後一個字元刪掉
: 像
: find -type f -exec sed '/(.*).$/\1/g' {} \;
: 之類的
: 但是發現sed好像不認得back reference \1
: 而且也不確定怎麼把輸出拿來改檔名
先回答第一個問題。
第二個問題我有空再補上。
你無法使用:find -type f -exec sed '/(.*).$/\1/g' {} \;
來更改檔名。因為這樣只是更改檔案內的本文內容,而不是改檔名。
: 或是說
: find -type f -exec mv {} `echo sed 's/???/???/g'`
: 也不確定怎麼把find的 {} 帶給 ``裡..
: 用|也是
你要用 find + sed + xargs去更改檔名才可。
例如:把工作目錄下的所有副檔名.foo的檔案 改成.bar
可這樣下指令:
find . -type f -name '*.foo' | sed -e p -e 's/\.foo$/.bar/' | xargs -n2 mv
1 2 3
1 處理完後的結果如下:
./a.foo
2 處理完後的結果如下:
./a.foo
./a.bar
3 處理完後的結果如下:
a.bar
或這樣的指令也可達到相同的功能
find . -type f -name '*.bar' | sed -e 's/.*/mv & &/' -e ' s/bar$/foo/ ' | sh
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.72.106
※ 編輯: u9423504 來自: 218.172.72.106 (08/10 03:50)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):