Як уникнути шляху файлу в SED?


40

Я хотів би замінити $fileWithPathв $file, однак це не працює , тому що (я думаю) шлях не врятувався. Як уникнути цього?

sed -i 's/${fileWithPath}/HAHA/g' $file

Відповіді:


72
sed -i 's|'$fileWithPath'|HAHA|g' file

Одиничні лапки визначають літеральний рядок. Поміщення змінної за межі буквального дозволяє оболонці розширити цю частину.

Також: якщо ви збираєтеся розбирати шляхи, використовуйте роздільник у команді sed, який не плутає з роздільником «/».


1
Остерігайтеся, що якщо $fileWithPathміститься пробіл, вставляється неправильний шаблон.
Лекенштейн

Ваша бонусна порада щодо зміни роздільника для файлових шляхів - це рятування життя!
Шадоніня

Я думаю, у вас занадто багато цитат у вашій команді. Мій приклад, sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnздається, працює.
Лео Леопольд Герц 준영


15

У випадках, коли рядок заміни або рядок шаблону містять косої риски, ви можете скористатися тим фактом, що GNU sed дозволяє альтернативному роздільнику команди заміщення. Поширеними варіантами для роздільника є характер труби | або хеш- номер - найкращий вибір обмежувального символу часто залежатиме від типу файлу, який обробляється. У вашому випадку ви можете спробувати

sed -i 's#'$fileWithPath'#HAHA#g' $file

Символ 'g' після останнього # використовується для зміни всіх входжень у файлі, якщо вам потрібно змінити лише перший випадок, а потім видалити 'g'.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.