Можно ли это сделать в одну строку?
У меня получился такой вывод:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
Эти входные данные генерируются автоматически.
Я хочу заменить первое вхождение "
(кавычки + пробел) на "
(кавычки) для каждой строки. Если я применю замену глобально, она также изменит каждое вхождение на line" -
, line"-
поэтому мне было интересно, можно ли использовать однострочник sed для достижения этого.
Я пробовал использовать ^
вот так
sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
Но это не работает, это ничего не заменяет. Я пробовал
sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
и он заменяет все вхождения. Я только начал использовать sed, поэтому не знаю, делаю ли я что-то неправильно.
Что я здесь упускаю?
решение1
Вы слишком много обдумываете. sed
по умолчанию заменяет только первый экземпляр в строке (без модификатора /g
), хотя вы все равно хотите привязаться, потому что вам не так нужен первый экземпляр в строке, как тот, что в начале строки; и вам обычно не нужны явные действия в строке, которые вы пытаетесь использовать (зачем?).
sed 's/^" /"/'
решение2
Более общий ответ, поскольку я не могу прокомментировать ответ geekosaur - Вы бы не поставили ^ (якорь начала строки). Например, если вы хотите заменить первое вхождение A на B, вы бы сделали
sed 's/A/B/'
решение3
С использованиемПерл
~$ perl -pe 's/^" /"/;' file
С использованиемРаку(ранее известный как Perl_6)
~$ raku -pe 's/^\" \s /"/;' file
Пример ввода:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
Пример вывода (оба примера кода):
"First line" - Description
"Second line" - Description
"Third line" - Description
"Fourth line" - Description
https://perldoc.perl.org/perlre
https://perldoc.perl.org/perltrap#Sed-Traps
https://docs.raku.org/language/regexes