Ввод слова в каждый текстовый файл в папке

Ответы:

20

Простое за сделаем работу:

for i in ./*.txt; do echo 'cat' >> "$i"; done;

Это получит список всех текстовых файлов в текущем каталоге, зацикливается на них и echoперебирает их (добавляет к содержимому). Вы можете изменить , >>чтобы >, чтобы перезаписать содержимое файлов с кошкой.

Другая вещь, которую вы можете сделать, это использовать teeдля перенаправления потока на несколько файлов.

Добавить:

echo "cat" | tee -a *.txt

Перезаписать:

echo "cat" | tee *.txt
Ravexina
источник
какой минус использовать echo "cat" >> *.txt?
hytromo
4
@hakermania, которая должна потерпеть неудачуambiguous redirect
Занна
13

Если файлы не пусты, вы можете использовать sedбез зацикливания. Чтобы добавить catв начале:

sed 'i\cat' *.txt

Добавить в конце:

sed 'a\cat' *.txt

Добавить после второй строки:

sed '2 a\cat' *.txt

Чтобы добавить перед строк fooв них:

sed '/foo/ i\cat' *.txt

Это не работает на пустых файлах, хотя. Вид ошибки.

( Для того, чтобы на самом деле писать в файлы после тестирования вам нужен -iвариант: sed -i 'a\cat' *.txt)

Занна
источник
Я ненавижу Sed :)), потому что есть много вещей, которые вы можете сделать с ним, и я не знаю о них :))
Ravexina
@Ravexina sed- мое варенье;)
Zanna
почему 'i\cat'используется обратная косая черта вместо косой черты?
phuclv
@ LưuVĩnhPhúc обратный слеш не является обязательным, вы также можете поставить 'icat'или i cat. Я считаю, что обратная косая черта обычная. Вы не можете использовать forwardwardslash - он будет буквально вставлен
Zanna
4

Python подход:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • он использует sysмодуль для перебора аргументов командной строки
  • каждый аргумент командной строки будет открыт как файл для записи
  • "кошка" с новой строкой будет записана в файл перед переходом к следующему

Использование будет как ./add_cat.py *.txt, которое будет работать со всеми .txtфайлами в текущем рабочем каталоге. Улучшение этого может включать в себя использование аргумента командной строки # 1 в качестве строки для записи вместо жесткого кодирования "cat" там.

Сергей Колодяжный
источник