複数のファイル名を含むファイルがあります。
$ cat test_as1
/var/incoming/foo.txt
/var/incoming/bar.txt
/var/incoming/baz.txt
各ファイル名について、ディレクトリ名とデフォルトのファイル名をコンマで区切って印刷したいと思います。たとえば、
/var/incoming,foo.txt
/var/incoming,bar.txt
/var/incoming,baz.txt
どうすればいいですか?
答え1
パラメータ拡張を使用してファイルを繰り返し、最後のスラッシュの前後の部分を印刷できます。
while IFS= read -r line; do
printf '%s,%s\n' "${line%/*}" "${line##*/}"
done < test_as1
"${line%/*}"
/*
行末の最短項目を削除し、"${line##*/}"
行の先頭から最長項目を削除します。*/
答え2
上記の説明で述べた@hhoke1のように、basename
コマンドdirname
を使用できます。
$ basename /var/incoming/new_items.txt
new_items.txt
$ dirname /var/incoming/new_items.txt
/var/incoming
答え3
これはあなたが言うのですか?
sed -e 's/\(.*\)\//\1,/' -i /var/incoming/new_item.txt