Добавление символов в конец строки с помощью SED

#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