Подстановка подстановочных знаков эха

Может быть выполнено с помощью sed или даже с использованием только инструментов bash.

Классическое решение bash:

var="$(cat file.txt)";while read -r id name;do var="${var//@$id/$name}";done<mapfile.txt;echo "$var"

Вы можете добавить > newfile.txt к последней команде, чтобы отправить окончательный текст в новом файле.

Решение Sed с записью изменений в один и тот же файл:

while read -r id name;do sed -i "s/\@$id/$name/g" textfile.txt;done<mapfile.txt

Это решение может работать медленнее, если файл карты / текстовый файл довольно большой, поскольку внешнее приложение sed вызывается для каждой записи, найденной в файле карты.

Оба решения работают с вашим образцом.

$ cat b.txt
<@U39RFF91U> for all the help in this project!
Thanks for your help to enhance the data quality <@U2UNRTLBV> <@U39RFF91U> <@U2UQCN023>!

$ cat c.txt
U39RFF91U  Person1
U2UNRTLBV  Person2

$ var="$(cat b.txt)";while read -r id name;do var="${var//@$id/$name}";done<c.txt #Batch Solution
$ echo "$var" 
<Person1> for all the help in this project!
Thanks for your help to enhance the data quality <Person2> <Person1> <@U2UQCN023>!

$ while read -r id name;do sed -i "s/\@$id/$name/g" b.txt;done<c.txt #SED solution
$ cat b.txt
<Person1> for all the help in this project!
Thanks for your help to enhance the data quality <Person2> <Person1> <@U2UQCN023>!
1
24.07.2017, 21:13
2 ответа

Вы можете подставить массив в массив, поэтому

FILENAMES=(somefile*.txt)

и сослаться на первый элемент следующим образом

echo "something:${FILENAMES[0]}"

или они все такие

echo "somethings:${FILENAMES[@]}"

Я настоятельно рекомендую использовать "двойные кавычки" ваших переменных при их использовании. Это позволяет избежать их неожиданного расширения на несколько слов.

4
27.01.2020, 23:18

Попробуйте определить переменную следующим образом:

FILENAME=\ somefile*.txt; # that is, with a leading space... and then
echo "something:"$FILENAME; 

переменная интерполируется в...что-то :какой-то файл *.txt

затем этот подстановочный знак расширяется до... чего-то :somefile003.txt

Эти два аргумента затем передаются функции echo, которая сразу же переводит их в стандартный вывод.

1
27.01.2020, 23:18

Теги

Похожие вопросы