簡體   English   中英

Bash 腳本將單詞括在單引號中

[英]Bash script to enclose words in single quotes

我正在嘗試編寫一個 bash 腳本來用單引號將文件中包含的單詞括起來。

詞 - 你好089

結果 - 'Hello089',

我嘗試了以下正則表達式,但它不起作用。 這適用於帶有查找和替換的 Notepad++。 我不確定如何對其進行調整以使其在 bash 腳本中工作。

sed "s/(.+)/'$1',/g" file.txt > result.txt

替換反向引用(也稱為占位符)是用\n語法定義的,而不是$n (這是類似於 perl 的反向引用語法)。

但是請注意,這里不需要組,因為您想用單引號將整行括起來。 這也是您不需要g標志的原因,它們僅在您計划在同一行查找多個匹配項時才需要,輸入字符串。

您可以使用以下 POSIX BRE 和 ERE(帶有-E的那個)解決方案:

sed "s/..*/'&',/" file.txt > result.txt
sed  -E "s/.+/'&',/" file.txt > result.txt

在 POSIX BRE(第一個)解決方案中, ..*匹配任何字符,然后匹配任何 0 個或多個字符(因此模擬.+常見的 PCRE 模式)。 POSIX ERE(第二個)解決方案使用.+模式來做同樣的事情。 右側的&用於插入整個匹配項(又名\0 )。 當然,您可以用捕獲括號將整個匹配括起來,然后使用\1 ,但這是多余的:

sed "s/\(..*\)/'\1',/" file.txt > result.txt
sed  -E "s/(.+)/'\1',/" file.txt > result.txt

請參閱 escaping,必須轉義 POSIX BRE 中的捕獲括號。

請參閱在線sed演示

s="Hello089";
sed "s/..*/'&',/" <<< "$s"
# => 'Hello089',
sed -E "s/.+/'&',/" <<< "$s"
# => 'Hello089',

$1sed看到它之前由 shell 擴展,但無論如何它都是錯誤的反向引用。 你需要\1 您還需要轉義定義捕獲組的括號。 因為sed腳本用雙引號括起來,所以您需要轉義所有反斜杠。

$ echo "Hello089" | sed "s/\\(.*\\)/'\1',/g"
'Hello089',

(我不記得是否有一種方法可以使用 ASCII 代碼而不是文字來指定單引號' ,這將允許您在腳本周圍使用單引號。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM