Bash - как поставить каждую строку в цитате
20451 просмотра
7 ответа
Я хочу поставить каждую строку в кавычки, такие как:
abcdefg
hijklmn
opqrst
преобразовать в:
"abcdefg"
"hijklmn"
"opqrst"
Как это сделать в скрипте оболочки Bash?
Автор: Bing.Physics Источник Размещён: 13.11.2019 11:51Ответы (7)
31 плюса
Использование awk
awk '{ print "\""$0"\""}' inputfile
Используя чистый Bash
while read FOO; do
echo -e "\"$FOO\""
done < inputfile
где inputfile
будет файл, содержащий строки без кавычек.
Если в вашем файле есть пустые строки, определенно стоит использовать awk :
awk 'NF { print "\""$0"\""}' inputfile
NF
указывает awk
на выполнение команды печати только в том случае, если число полей больше нуля (строка не пустая).
10 плюса
Я использую следующую команду:
xargs -I{lin} echo \"{lin}\" < your_filename
xargs
Взять стандартный ввод (перенаправлено из файла) и передать одну строки один раз в {lin}
заполнитель, а затем выполнить команду в следующем, в этом случае echo
с уцелевшими в двойных кавычках.
Вы можете использовать -i
опцию xargs, чтобы опустить имя заполнителя, например так:
xargs -i echo \"{}\" < your_filename
В обоих случаях ваш IFS должен иметь значение по умолчанию или '\n'
как минимум.
6 плюса
Используйте sed:
sed -e 's/^\|$/"/g' file
Требуется больше усилий, если файл содержит пустые строки.
Автор: choroba Размещён: 07.06.2013 07:215 плюса
Этот sed также должен работать для игнорирования пустых строк:
sed -i.bak 's/^..*$/"&"/' inFile
или же
sed 's/^.\{1,\}$/"&"/' inFile
Автор: anubhava
Размещён: 07.06.2013 07:59
3 плюса
Я думаю, что sed и awk - лучшее решение, но если вы хотите использовать только shell, это небольшой скрипт для вас.
#!/bin/bash
chr="\""
file="file.txt"
cp $file $file."_backup"
while read -r line
do
echo "${chr}$line${chr}"
done <$file > newfile
mv newfile $file
Автор: grepit
Размещён: 07.06.2013 07:22
2 плюса
paste -d\" /dev/null your-file /dev/null
(не самый красивый, но, вероятно, самый быстрый)
Теперь, если входные данные могут содержать кавычки, вам может потребоваться экранировать их с помощью обратной косой черты (а затем и обратной косой черты), например:
sed 's/["\]/\\&/g; s/.*/"&"/' your-file
Автор: Stephane Chazelas
Размещён: 07.06.2013 09:19
0 плюса
Я использовал sed с двумя выражениями для замены начала и конца строки, так как в моем конкретном случае использования я хотел разместить HTML-теги только вокруг строк, содержащих определенные слова.
Поэтому я искал строки, содержащие слова, содержащиеся в bla
переменной в текстовом файле, inputfile
и заменил на начало <P>
и конец на конец </P>
(ну, на самом деле я сделал более длинные HTML-теги в реальной работе, но это будет хорошо служить примером)
Похожий на:
$ bla=foo
$ sed -e "/${bla}/s#^#<P>#" -e "/${bla}/s#\$#</P>#" inputfile
<P>foo</P>
bar
$
Автор: DOK
Размещён: 26.08.2015 01:38
Вопросы из категории :
- linux Как отправить файл в виде вложения электронной почты с помощью командной строки Linux?
- linux Как разделить два 64-битных числа в ядре Linux?
- linux Изучение файлов Беркли БД из CLI
- linux Как передать пароль на scp?
- linux Как показать все общие библиотеки, используемые исполняемыми файлами в Linux?
- bash Как разрешить символические ссылки в сценарии оболочки
- bash Удалить все, кроме самых последних файлов X в Bash
- bash Распараллелить скрипт Bash с максимальным количеством процессов
- bash Как мне написать цикл для Bash
- bash Как обнулить числа в именах файлов в Bash?
- shell Вызов команд оболочки из Ruby
- shell Проверьте, существует ли каталог в сценарии оболочки
- shell Как я могу отправить стандартный вывод одного процесса нескольким процессам, используя (желательно безымянные) каналы в Unix (или Windows)?
- shell Как подавить прекращение сообщения после убийства в bash?
- text Как мне продублировать целую строку в Emacs?
- text Как изменить текстовый файл?
- text Быстрая команда Unix для отображения определенных строк в середине файла?
- text Поиск отмеченного (выделенного) текста в Emacs
- text Извлечение текста из файла HTML с использованием Python