Отже, можна легко приєднати файли в bash з cat:
cat *.txt > all.txt
Але що, якщо хтось хоче вставити щось між вхідними файлами, як, наприклад, подача рядка?
Отже, можна легко приєднати файли в bash з cat:
cat *.txt > all.txt
Але що, якщо хтось хоче вставити щось між вхідними файлами, як, наприклад, подача рядка?
Відповіді:
Вимагає GNU sed:
sed -s '$G' *.txt > all.txt
додайте рядок з 8 тире і новий рядок після кожного файлу
sed -s '$a--------' *.txt
Ви можете використовувати ваш sed '$ d' з цим
Порівняйте з ними:
Вставити рядок тире перед кожним файлом:
sed -s '1i--------' *.txt
Зробіть те ж саме, але без рядка після тире:
sed -s '1s/^/--------/' *.txt
Покладіть рядок тире на кінець останнього рядка кожного файлу:
sed -s '$s/$/--------/' *.txt
Обведіть кожен файл фігурними дужками:
sed -s -e '1i{' -e '$a}' *.txt
sed -s '$a--------' *.txt після кожного файлу додаватиме рядок з 8 тире і рядка. Ви можете використовувати свій sed '$d' З цим. Порівняйте з ними: sed -s '1i--------' *.txt, sed -s '1s/^/--------/' *.txt, sed -s '$s/$/--------/' *.txt і sed -s -e '1i{' -e '$a}' *.txt
В якості одного лайнера з оболонками:
( for i in *.txt ; do cat $i ; echo 'separator here' ; done ) >all.txt
Ось що виконує підрозділ, розділений на рядки стилю сценарію:
for i in *.txt do cat $i echo 'separator goes here' done
У цьому прикладі роздільник діє як нижній колонтитул; додайте заголовок, додавши інший echo перед cat.
for i in *.txt; do cat "$i"; echo 'stuff'; done > all.txt
files=(*.txt); indices=(${!files[@]}); for i in ${indices[@]}; do cat "${files[i]}"; if [[ $i != ${indices[@]: -1} ]]; then echo "separator"; fi; done > all.txt
catWithSep() { sep="$1"; shift; first=''; for f; do test -n "$first" && echo "$sep"; cat "$f"; first=no; done; }; catWithSep separator *.txt