Используйте sed, чтобы заменить строку, содержащую символы со значениями специальных значений для sed

Если кто-то использует хомяка и найдет эту функцию удобной, это мой текущий рабочий код:

#!/bin/bash
file=/usr/local/bin/hamster-log
last=$(<$file)
activity=$(zenity --entry --title "Enter new activity name" --text "New activity name:" --entry-text "$last")
hamster start "$activity"
if [ ! -z "$activity" ]; then
    if [ -f "$file" ]; then
        echo "$activity" > "$file"
    fi
fi

Он помещается в папку /usr/local/bin/. И в той же папке есть файл hamster-log с разрешениями 777. Я использую Shortcut Super + H и запускаю этот скрипт и Super + Shift + H, чтобы остановить действие (команда hamster stop). Когда у меня будет больше времени, я буду продолжать работать над этим и обновлять код. Есть еще несколько функций, которые я хотел бы добавить.

0
задан 23 August 2017 в 18:34

2 ответа

sed может использовать разделители переменных:

$ echo "1 /value Error Code:12345/I " | sed 's;/value.*/I;/deleted by user/i;' 1 /deleted by user/i

Но если вам нужно использовать / по любой причине, вы всегда можете добавить \ к ним, когда они являются буквальными:

$ echo "1 /value Error Code:12345/I " | sed 's/\/value.*\/I/\/deleted by user\/i/;' 1 /deleted by user/i

Или вы можете вообще отказаться от sed и использовать awk, а / в качестве разделителя для обоих полей ввода и выходных полей:

$ echo "1 /value Error Code:12345/I " | awk -F'/' 'BEGIN{OFS=FS}{$2="deleted by user";$3="i";print}' 1 /deleted by user/i
1
ответ дан 18 July 2018 в 09:57

sed может использовать разделители переменных:

$ echo "1 /value Error Code:12345/I " | sed 's;/value.*/I;/deleted by user/i;' 1 /deleted by user/i

Но если вам нужно использовать / по любой причине, вы всегда можете добавить \ к ним, когда они являются буквальными:

$ echo "1 /value Error Code:12345/I " | sed 's/\/value.*\/I/\/deleted by user\/i/;' 1 /deleted by user/i

Или вы можете вообще отказаться от sed и использовать awk, а / в качестве разделителя для обоих полей ввода и выходных полей:

$ echo "1 /value Error Code:12345/I " | awk -F'/' 'BEGIN{OFS=FS}{$2="deleted by user";$3="i";print}' 1 /deleted by user/i
1
ответ дан 24 July 2018 в 19:29
  • 1
    В третьем примере основной блок должен быть $2="deleted by user";$3="i";print. @Bala Мне интересно, почему этот ответ не был принят. – simlev 10 August 2017 в 16:07

Другие вопросы по тегам:

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