я использую
!/bin/bash
for fl in *.txt; do
mv $fl $fl.old
sed 's/files.php?file=/file/g' $fl.old > $fl
rm -f $fl.old
done
Мне нужно, чтобы вывод был заменен файлом / не только файлом, не могу понять
Ты можешь использовать #
или |
вместо того /
чтобы облегчить жизнь при использовании слэшей в узорах:
!/bin/bash
for fl in *.txt; do
mv $fl $fl.old
sed 's#files.php?file=#file/#g' $fl.old > $fl
rm -f $fl.old
done
Это избавляет вас от необходимости избегать всех косых черт, которые вы хотите сопоставить или использовать в качестве замены, например \/
Также, чтобы прояснить:
/
косая черта
\
это обратная косая черта
Вы можете использовать экранирование обратной косой черты:
sed 's/files.php?file=/file\//g' $fl.old > $fl
И это даст желаемый результат.
Вам не нужно использовать /
с sed вы можете использовать что-то еще, например #
или |
sed 's#files.php?file=#file/#g'
или
sed 's|files.php?file=|file/|g'
Использование:
sed 's/files.php?file=/file\//g;' $fl.old > $fl
Обратите внимание на \
используется, чтобы избежать /
после file
в замене ...