sed з буквальним рядком - не вхідний файл


96

Це повинно бути просто: я хочу запустити sed проти буквального рядка, а не вхідного файлу. Якщо вам цікаво, чому, наприклад, це редагування значень, що зберігаються у змінних, не обов'язково текстових даних.

Коли я роблю:

sed 's/,/','/g' "A,B,C"

де A, B, C - це буквал, який я хочу змінити на A ',' B ',' C

я отримав

Can't open A,B,C

Як би він вважає, що A, B, C - це файл.

Я спробував перетворити його на ехо:

echo "A,B,C" | sed 's/,/','/g' 

Я отримую підказку.

Який правильний спосіб це зробити?

Відповіді:


151

У вас є конфлікт одинарних лапок, тому використовуйте:

 echo "A,B,C" | sed "s/,/','/g"

Якщо використовується , ви також можете зробити ( <<<це a here-string):

sed "s/,/','/g" <<< "A,B,C"

але не

sed "s/,/','/g"  "A,B,C"

тому що sedочікуйте файл (и) як аргумент (и)

РЕДАГУВАТИ :

якщо ви використовуєте або будь-які інші:

echo string | sed ...

1
дивно, не працює у мене ... усвідомлюючи, що це було опубліковано деякий час тому, але дивна застарілість, якщо в цьому проблема
супергерой


5

Моя версія з використанням змінних у сценарії bash:

Знайдіть будь-які зворотні скісні риски і замініть їх на прямі скісні риски:

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.