1

Мне нужна помощь, или я вместо этого сделаю это на python (читая по одной строке за раз), что, как я знаю, мне не нужно.

У меня есть большое количество текстовых файлов, которые я использую при поиске.

FILES=$(find ... -iname "*.txt")
num=0
for doc in $FILES; do
     echo "start string" > cat $doc > echo "end string" > "outfile$num.txt"
     let num=num+1
done

Я не знаю многих команд Unix, но я хочу сделать что-то вроде этого:

выведите "start string", затем cat $ doc, затем "end string" в stdout и сохраните в выходном файле.

Спасибо за помощь!!

1 ответ1

0

использование

{echo "start string"; cat $doc; echo "end string"} > "outfile$num.txt"

Или в качестве альтернативы:

echo "start string" > "outfile$num.txt"
cat $doc >> "outfile$num.txt"
echo "end string" >> "outfile$num.txt"

Или еще один пример использования sed (вы можете сделать что-то похожее с awk):

sed -e '1i start string;$a end string' $doc > "outfile$num.txt"

В первом примере три команды просто выполняются последовательно, а затем вывод целиком передается на перенаправление вывода > "outfile$num.txt" .

Во втором примере мы делаем это в трех командах и используем оператор >> вместо оператора > чтобы объединить выходные данные в данный файл вместо замены указанного файла выходными данными.

Кроме того, кроме того, вы должны быть осторожны с использованием for doc in $FILES , это разделяет пробелы, поэтому, если любое из ваших имен файлов содержит пробелы, они будут интерпретироваться как несколько имен файлов вместо одного имени файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .