Bagaimana cara menggunakan string kata demi kata dalam sed?

8

Misalnya,

sed 's/string/ /g' where string="a\c:ti]\']x""/\//:`~$%#^&"'

Itulah cara mengoper string ke sed secara harfiah alih-alih sebagai pola regex yang ditafsirkan?

Saya akan menggunakan ini dengan cygwin dan di ubuntu, jadi solusinya harus kompatibel dengan lingkungan.

pengguna93200
sumber
terkait: stackoverflow.com/questions/407523/…
Ciro Santilli 新疆 改造 中心 996ICU 六四 事件

Jawaban:

3

Anda harus keluar dari karakter khusus dan menggunakan pemisah selain "/".

sed 's#string1#string2#'
Scott C Wilson
sumber
Saya paling sering melihat |ketika menggunakan sed.
Rob
Harus diakui, ini adalah string yang jelek.
Scott C Wilson
1

Lihat SOq ini:

Jawaban di atas:

adalah sesuatu yang Anda butuhkan, kecuali Anda akan melakukannya di bagian pertama, bukan bagian kedua s/first/second/.

Ketika Anda menggunakan keduanya 'dan "dalam perintah sed Anda, Anda harus melarikan diri dari itu. Coba lakukan ini - buat dua file:

1.sed

s_"a\\c:ti]\\']x""/\\//:`~\$%#\^&"'_ _g

2.txt

"a\c:ti]\']x""/\//:`~$%#^&"'hello world m"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'this is working"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'as expected"a\c:ti]\']x""/\//:`~$%#^&"'

1.sed adalah skrip itu sendiri dan 2.txt adalah file uji. Jalankan seperti ini untuk menguji:

$ sed -f 1.sed 2.txt
 hello world m 
 this is working 
 as expected 

$ 

Semoga ini membantu.

icyrock.com
sumber
Perintah apa yang digunakan untuk melarikan diri? gema "a \ c: ti] \ '] x" "/ \ //:` ~ $% # ^ & "' sed -e 's / ([[\ /.*] \ |]) / \\ & / g menghasilkan> prompt di bash.
user93200
Jika Anda mencampur keduanya '(penawaran tunggal) dan "(penawaran ganda), Anda harus melarikan diri dari sesuatu dalam string. Ini bukan "masalah" dengan sedper-se, bahkan jika Anda hanya menggema "a \ c: ti] \ '] x" "/ \ //: ~$%#^&"', it will be not a complete string. E.g. you cannot do echo "abc"" and expect it to print abc" `- Anda harus melarikan diri dari ".
icyrock.com
Bisakah Anda memberikan perintah untuk secara otomatis keluar dari string yang diberikan dan juga menguraikan bagaimana solusi mungkin dipengaruhi oleh lingkungan (berjalan di bash atau di cmd.exe)?
user93200
Perintah di tautan yang disediakan memberi Anda itu (yang Anda masukkan dalam komentar pertama ke jawaban saya). Masalahnya adalah bahwa Anda tidak dapat melakukan itu seperti yang Anda inginkan - input dari echoperintah bahkan tidak bisa sampai sedke yang akan lolos, itu harus melarikan diri di tempat untuk bahkan dicetak dengan echobenar. Solusi lain - memasukkan string ke dalam file - adalah apa yang akan berhasil, lihat hasil edit saya. Semoga itu akan berhasil untuk Anda.
icyrock.com