Sed / конец строки $ / сопоставление с образцом не работает с переменной оболочки, содержащей / в значении переменной - PullRequest
0 голосов
/ 06 ноября 2018

Переменная объявлена ​​

var1=/home/jrajpal/sync_dir
var2=/test/

Пример моего входного файла

cat test.txt
/home/jrajpal/sync_dir/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir
/home/jrajpal/sync_dir/test/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test
/home/jrajpal/sync_dir/test1/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test1

sed "s#$var1#& $var2#2" /home/jrajpal/test.txt

Когда команда запускается выше для поиска точного шаблона и замены на, она перехватывает все 3 строки и заменяет их, в то время как мне нужно сопоставить только первую строку из файла, но шаблон конца строки $ не работает

sed "s#$var1\$#& $var2#2" /home/jrajpal/test.txt - -> Эта команда не работает должным образом, и вывод файла остается неизменным

/home/jrajpal/sync_dir/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir
/home/jrajpal/sync_dir/test/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test
/home/jrajpal/sync_dir/test1/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test1

1 Ответ

0 голосов
/ 06 ноября 2018
sed "s#$var1\$#& $var2#2"
#                      ^

Проблема в том, что 2 в конце. Он говорит sed заменить только второе совпадение в каждой строке.

Но $ совпадает только в конце строки, поэтому этот шаблон может совпадать только один раз для каждой строки.

Другими словами, вы говорите sed искать второй конец каждой строки, что не имеет смысла.

sed "s#$var1\$#& $var2#"

должен это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...