Вопрос или проблема
Я пытаюсь добавить текст в начало и конец каждой строки в .txt файле.
Я хочу добавить в начало: I am a
Я хочу добавить в конец:
128... [}
к каждой строке.
Внутри a.txt:
fruit, like
bike, like
dino, like
После выполнения следующей команды:
$ cat a.txt|sed 'I am a ',' 128... [}'
она не работает так, как я хочу. Я действительно хочу, чтобы она выдавалась следующим образом:
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Простой подход с sed
:
sed 's/^/I am a /; s/$/ 128... [}/' file.txt
^
– обозначает начало строки/строки$
– обозначает конец строки/строки
Вывод:
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Альтернативно, с помощью Awk
вы можете сделать следующее:
awk '{ print "I am a", $0, "128... [}" }' file.txt
sed 's/.*/PREFIX&SUFFIX/' infile
подойдет, если PREFIX
и SUFFIX
не содержат специальных символов.
\&/
(обратная косая черта, амперсанд и разделитель) являются специальными, когда находятся в правой части подстановки s
. Специальное значение этих символов можно подавить, экранировав их (предшествуя им обратной косой чертой), например, чтобы добавить в начало A//BC
и в конец XY\Z&&
, нужно выполнить:
sed 's/.*/A\/\/BC&XY\\Z\&\&/' infile
Perl:
$ perl -lne 'print "I am a $_ 128... [}"' file
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Еще Perl:
$ perl -pe 's/^/I am a /; s/$/ 128... [}/' file
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Еще немного Perl:
$ perl -lpe '$_="I am a $_ 128... [}"' file
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Для всех этих случаев вы можете использовать -i
, чтобы внести изменения в исходный файл:
$ perl -i -lne 'print "I am a $_ 128... [}"' file
$ perl -i -pe 's/^/I am a /; s/$/ 128... [}/' file
$ perl -i -lpe '$_="I am a $_ 128... [}"' file
Альтернативный sed
sed -e 's/^\(.*\)$/I am a \1 128 [{/
Он ищет все .*
между началом ^
и концом строки $
, и помещает это в группу \( \)
. Затем он заменяет его префиксом, (первой) группой \1
и суффиксом.
Используйте этот инструмент, чтобы убедиться, что результат подходит
.
Ответ или решение
Теория
При обработке текстовых файлов довольно часто возникает необходимость добавлять префикс и суффикс к каждой строке. Это может понадобиться для маркировки, изменения формата или подготовки данных для последующей обработки. Основные инструменты для работы с текстом в Unix-подобных системах включают утилиты sed
, awk
и perl
. Эти инструменты позволяют выполнять сложные текстовые преобразования, используя регулярные выражения и шаблоны.
Пример
Рассмотрим задачу добавления префикса I am a
и суффикса 128... [}
ко всем строкам в файле a.txt
, содержащем следующие строки:
fruit, like
bike, like
dino, like
Ожидаемый результат после обработки:
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
Применение
Использование sed
Утилита sed
, или потоковый редактор, позволяет редактировать файл, не изменяя сам файл. Чтобы добавить префикс и суффикс к каждой строке с помощью sed
, воспользуйтесь следующей командой:
sed 's/^/I am a /; s/$/ 128... [}/' a.txt
^
обозначает начало строки, иI am a
добавляется перед содержимым;$
обозначает конец строки, и128... [}
добавляется после содержимого.
Использование awk
Awk
— это мощный инструмент для обработки и анализа текстовых данных. В следующем примере Awk используется для достижения той же цели:
awk '{ print "I am a", $0, "128... [}" }' a.txt
$0
ссылается на всю текущую строку, которая выводится вместе с префиксом и суффиксом.
Использование perl
Perl может использоваться как для быстрой обработки текста в командной строке, так и для более сложных сценариев. Примеры использования Perl:
- С использованием замены начала и конца строки:
perl -pe 's/^/I am a /; s/$/ 128... [}/' a.txt
- С использованием переменных для создания новой строки:
perl -lpe '$_="I am a $_ 128... [}"' a.txt
Вывод
Каждое из вышеописанных решений подходит для выполнения задачи добавления префикса и суффикса к строкам в текстовом файле. Выбор конкретного инструмента зависит от ваших предпочтений и возможностей системы. Важно помнить о возможности использования ключа -i
в Perl для изменения оригинального файла на месте, что может быть полезно в некоторых ситуациях.