Bash несколько кодовых файлов

Я пытаюсь выполнить cat три файла и получить и вставить новую строку \n после каждого файла я думал использовать что-то вроде:

cat f1 f2 f3|tr "\EOF" "\n"

без успеха.

Каков самый простой способ достичь этого?

Ответ 1

cat f1 <(echo) f2 <(echo) f3 <(echo) 

или

perl -pe 'eof&&s/$/\n/' a b c

Ответ 2

Как только вы cat файлы, между ними не будет EOF, и нет другого способа найти границу, поэтому я бы предложил что-то вроде for file in f1 f2 f3; do cat $file; echo; done или, с отступом,

for file in f1 f2 f3; do
    cat $file;
    echo;
done

Ответ 3

EOF не является символом, даже CTRL-D, который является обычным терминальным методом для указания EOF на интерактивном входе. Поэтому вы не можете использовать инструменты для перевода символов, чтобы каким-то образом изменить их.

В этом простом случае самый простой способ - перестать беспокоиться о попытке сделать это в одном cat: -)

cat f1; echo; cat f2; echo; cat f3

сделает трюк просто отлично. Любое большее количество файлов может быть достойным script, но я не вижу необходимости в этом маленьком случае.

Если вы хотите объединить все эти потоки для дальнейшей обработки, просто запустите их в подоболочке:

( cat f1; echo; cat f2; echo; cat f3 ) | some_process

Ответ 4

Попробуйте следующее:

find f1 f2 f3 | xargs cat

Ответ 5

У меня была аналогичная проблема, что лучше всего для меня работало:

grep "" file1 file2 file3 | awk -F ':' '{print $2}'