回答:
すべてのファイルの後に行末を出力するシェル関数を定義し、次の代わりに使用しますcat
。
endlcat() {
for file in "$@"; do
cat -- "$file"
echo
done
}
その後、使用できますendlcat *
。
for
ループは、すべての提供の引数(上のループ$@
あなたのようなワイルドカードを使用する場合、既にシェルでエスケープされています)*
。--
ダッシュで始まるファイル名に詰まらないようにする必要があります。最後に、echo
出力は改行です。
in "$@"
-それは暗黙的です。
単純な代わりにループを使用するだけcat
です:
for file in /path/to/targetdir/*; do
echo "-------- $file -------"
cat "$file"
done
これは動作します:
sed '' -- *
シェルループなどは必要ありません。これにより、ファイルの出力の後に\n
ewlineが続きます-おそらく最後のものを除きます。
それ以外の場合、各ファイルの出力の間に空白行を出力したい場合は、次のように機能します。
bpaste(){
eval "paste -'sd\n' -- $(x=0;for f do printf "\"\${$((x+=1))}\" - ";done)"
} </dev/null
これは常に、\n
ewline と追加の空白行を含むファイルの出力に従います。
次のように呼び出すことができます:
bpaste *
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
は常に何かを印刷する\n
前にewlineを印刷する必要があります。ただし、最後のファイルの最終行には\n
ewlineが追加されない場合があります。私は以前にこの質問に答えたと誓うことができました。
1\n2\n3
。できます。常にそうです。それはあなたのために何を印刷しますか?
\n
RHSでの使用は標準ではありません。使用できますsed -e '$G'
。
別の方法- grep -h
各ファイルで空の文字列を単に検索するために使用します。これは、改行の数や改行の有無に関係なく、すべての行に一致します。grepの結果は常に改行で終了します。この-h
オプションは、出力の各行の前に、ファイル名を付けないようにします。
$ printf 'a' > a
$ printf 'b\nB' > b
$ printf 'c\n' > c
$ ls
a b c
$ cat -- *
ab
Bc
$ grep -h '' *
a
b
B
c
$
または、区切り文字として改行を使用してpaste
、-s
erialモードでGNU を使用できます。
$ paste -s -d '\n' -- *
a
b
B
c
$