$ ls *
2000-01-01-abcd.md
2000-01-01-cdef.md
次のコマンドからabcdとcdefを抽出できます。
find *.md -exec sh -c "echo {} | sed 's/.md//' | sed 's/2000-01-01-//'" \;
ファイルの先頭に文字列を追加してこれを行う方法を知っていますが、sed '1s/^/string/'
正確な文字列を渡すにはどうすればよいですか?
各ファイルの先頭に対応する文字列を追加したいので、この文字列 "abcd"と "cdef"をそのファイルにどのように渡すことができますか?
ベストアンサー1
各ファイルの先頭に対応する文字列を追加します。
強く打つ+sed方法:
for f in *.md; do fn=${f##*-}; sed -i "1 s/^/${fn%.*} /" "$f"; done
fn=${f##*-}
- 最も長い一致シーケンスを左から最後の項目に切り捨てます-
(例abcd.md
:)。${fn%.*}
.
- 前の部分文字列fn
(たとえば)がabcd
最初に表示されるまで、一番右のシーケンス(終わりから始まる)を切り捨てます。sed -i "1 s/^/${fn%.*} /" "$f"
- ファイルの先頭に希望の文字列を追加します。