я использую
sed -e "s/\*DIVIDER\*/$DIVIDER/g"
для замены *DIVIDER*
на указанную пользователем строку, которая хранится в $DIVIDER
. Проблема в том, что я хочу, чтобы они могли указывать escape-символы в качестве разделителя, например \ n или \ t. Когда я пытаюсь это сделать, я просто получаю букву n или t и т. Д.
У кого-нибудь есть идеи, как это сделать? Это будет с благодарностью!
РЕДАКТИРОВАТЬ: Вот суть сценария, я должен что-то упустить.
curl --silent "$URL" > tweets.txt
if [[ `cat tweets.txt` == *\<error\>* ]]; then
grep -E '(error>)' tweets.txt | \
sed -e 's/<error>//' -e 's/<\/error>//' |
sed -e 's/<[^>]*>//g' |
head $headarg | sed G | fmt
else
echo $REPLACE | awk '{gsub(".", "\\\\&");print}'
grep -E '(description>)' tweets.txt | \
sed -n '2,$p' | \
sed -e 's/<description>//' -e 's/<\/description>//' |
sed -e 's/<[^>]*>//g' |
sed -e 's/\&\;/\&/g' |
sed -e 's/\<\;/\</g' |
sed -e 's/\>\;/\>/g' |
sed -e 's/\"\;/\"/g' |
sed -e 's/\&....\;/\?/g' |
sed -e 's/\&.....\;/\?/g' |
sed -e 's/^ *//g' |
sed -e :a -e '$!N;s/\n/\*DIVIDER\*/;ta' | # Replace newlines with *divider*.
sed -e "s/\*DIVIDER\*/${DIVIDER//\\/\\\\}/g" | # Replace *DIVIDER* with the actual divider.
head $headarg | sed G
fi
Длинный список строк sed заменяет символы из источника XML, а последние два - те, которые должны заменить символы новой строки указанным символом. Я знаю, что заменить новую строку новой строкой кажется излишним, но это был самый простой способ, который я мог придумать, чтобы позволить им выбрать свой собственный разделитель. Замена делителя отлично работает с обычными символами.