как заменить символ в нескольких словах с двойными кавычками в строке с помощью sed?

Привет, есть разные команды, которые могут помочь вам в последней строке, попробуйте это ..

<grep command> | tail -1

или

awk '/result/ { save=$0 }END{ print save }' filename
0
24.01.2015, 00:59
3 ответа

Sed не подходит для этого. Я думаю, что для достижения описанного выше могут потребоваться некоторые расширенные функции. Вот он-лайн perl, который заменяет любое количество двойных запятых в двойных кавычках на <пробел> | <пробел> .

$ echo '012345,"[ThinkPadT2/3Gband,Mac,Apple]",Lenovo,"iPhone3G,A1241"' | perl -pe 's/,(?!(?:"[^"]*"|[^"])*$)/ | /g'
012345,"[ThinkPadT2/3Gband | Mac | Apple]",Lenovo,"iPhone3G | A1241"
0
29.04.2021, 00:32

Вы можете попробовать что-то вроде этого:

$ cat filename
012345,"[ThinkPadT2/3Gband,Mac]",Lenovo,"iPhone3G,A1241"

$ cat filename | sed -E 's:([A-Z,a-z]),([A-Z,a-z]):\1|\2:g'
012345,"[ThinkPadT2/3Gband|Mac]",Lenovo,"iPhone3G|A1241"
0
29.04.2021, 00:32

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

sed 's/\(\"[^",]\{1,\}\),\([^",]\{1,\}\"\)/\1 | \2/g'

Или для GNU sed

sed -r 's/("[^",]+),([^",]+")/\1 | \2/g'
2
29.04.2021, 00:32

Теги

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