iT邦幫忙

0

linux sed文字處理的問題

  • 分享至 

  • xImage

各位好

我有一堆文字檔,有上千隻,我想要寫一個迴圈,因為內容完全沒有時間,只有檔名有,所以我想把檔案名稱的日期和時間寫到文字檔的第一欄放進去,請問一下應該如何處理?

我想到的是,下面這種方法,但應該是錯的,不知道怎麼修正比較好?

filepath = ‵find . xxxxxxx ‵
filedatetime = ‵find . xxxxxxx ‵
sed 's/^/'$filedate' /' $filename

$filedatetime print 出來的格式是20221011 133045
感謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
wiseguy
iT邦超人 1 級 ‧ 2022-11-01 00:24:59
最佳解答
for F in `ls -1 20*`
do
  sed -i "s/^/$F /" $F
done
看更多先前的回應...收起先前的回應...
Ryan iT邦新手 1 級 ‧ 2022-11-01 15:52:44 檢舉
for i in $filedate
do
sed "s/^/$filedate /" $filename
done

我這樣跑有錯誤訊息?

sed: unmatched '/'
wiseguy iT邦超人 1 級 ‧ 2022-11-02 00:51:20 檢舉

你程式是錯的,當然跑就有錯誤訊息,沒毛病啊
只是我不懂你為啥要寫這樣?我都給正確答案了不是嗎

Ryan iT邦新手 1 級 ‧ 2022-11-02 18:11:51 檢舉

謝謝,我修了一下,因為是很多個子目錄裡面都有檔案,所以我想用find去把檔案名稱抓出來,放到一個變數。
然後在抓一個所有的檔案路徑,放到另外一個變數。

for F in `find . -not -name '*ERR*' -name *2022*.txt`
do
sed "s/^/$F /" $F
done

執行結果有另外一個錯誤。

sed: bad option in substitution expression
wiseguy iT邦超人 1 級 ‧ 2022-11-02 22:49:44 檢舉

有目錄要說啊!因為有目錄,所以 $F 中含有 / 當然就會跟 sed 語法衝突。所以程式要改成:

for F in `find . -name '2022*.txt'`
do
  N=`basename $F|sed 's/.txt$//'`
  sed -i "s/^/$N /" $F
done

N 是把目錄去掉,只剩檔名,也就是你要的日期。

Ryan iT邦新手 1 級 ‧ 2022-11-03 13:58:54 檢舉

謝謝你,可以了。

我要發表回答

立即登入回答