Попробуйте эту строку
sed -e "s/^\"'/\'/g" -e "s/'\"$/\'/g" file
Вместо того, чтобы заключать выражение sed
между ' '
, сделайте это между " "
так вы сможете избежать \
the " "
e.g.
@tachomi:~$ echo "\"'this text'\""
"'this text'"
@tachomi:~$ echo "\"'this text'\"" | sed -e "s/^\"'/\'/g" -e "s/'\"$/\'/g"
'this text'
e.g.2
@tachomi:~$ cat file.txt
"'this text'"
"that text"
'other_text'
@tachomi:~$ sed -e "s/^\"'/\'/g" -e "s/'\"$/\'/g" file.txt
'this text'
"that text"
'other_text'
Поскольку дальнейшего ответа не последовало, я предлагаю просто заменить весь скрипт на
grep -F -f text.txt file.txt >out.txt
Это предполагает, что входные данные из text.txt представляют собой просто строки, которые нужно проверить, а не регулярное выражение, на что указывают сообщения об ошибках, заменяющие $STRING на 000.. из-за этого -f считывает каждую строку из файла, в то время как -F просто обрабатывает их как простые строки. Все, что затем совпадает с файлом file.txt, будет отправлено в out.txt.
В ответ на комментарий dave _thompson _085 ниже, это все еще может быть полезно, если есть абзацы с известной структурой, то есть искомая строка находится в определенной строке в каждом абзаце, тогда -B
и -A
можно также использовать для печати количества строк до и после совпадения.