#sed
#sed
Вопрос:
Я пытаюсь добавить восклицательные знаки в конец каждой строки в этом текстовом файле. Мне сказали, что мне нужно переключить все символы из нижнего регистра в верхний регистр, и я сделал это со строкой ниже. Я не уверен, как включить восклицательные знаки в одно и то же sed
утверждение.
cat "trump.txt" | sed 's/./Uamp;/g'
Комментарии:
1. Вы хотите сопоставить
.*
(всю строку) вместо.
(одного символа) — тогда вы можете просто добавить восклицательные знаки в конце замены. Иg
не понадобится.
Ответ №1:
Рассмотрим этот пример текста:
$ cat ip.txt
this is a sample text
Another line
3 apples
С sed
помощью команды, указанной в вопросе, которая вводит в верхний регистр по одному символу за раз с g
флагом
$ sed 's/./Uamp;/g' ip.txt
THIS IS A SAMPLE TEXT
ANOTHER LINE
3 APPLES
Чтобы добавить некоторые другие символы в конце
$ sed 's/.*/Uamp;!!!/' ip.txt
THIS IS A SAMPLE TEXT!!!
ANOTHER LINE!!!
3 APPLES!!!
.*
будет соответствовать всей строке иamp;
будет содержать всю строку при заменеg
флаг не нужен, так как замена происходит только один раз
Ответ №2:
Вот awk
версия, в которой весь текст будет преобразован в верхний регистр, а затем будут добавлены три восклицания.
awk '{$0=toupper($0) "!!!"}1' input
THIS IS A SAMPLE TEXT!!!
ANOTHER LINE!!!
3 APPLES!!!
Объяснение:
$0
целая строка или запись. toupper
это awk
встроенная функция для преобразования ввода в верхний регистр. Здесь $0
предоставляется в качестве входных данных для функции toupper. Таким образом, он преобразуется $0
в верхний регистр.наконец, в верхнем регистре $0
и !!!
будет заменен на $ 0 в качестве новых значений.
Разбивка команды:
awk '{$0=toupper($0)}1' input # to make text uppercase.
awk '{$0= $0 "!!!"}1' input # to add "`!!!`" in the end of text.
Или bash
способ: ^^
знак после имени переменной сделает содержимое переменной прописным.
while read line;
do
echo "${line^^}"'!!!' ;
done <input