[英]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',
$1
在sed
看到它之前由 shell 擴展,但無論如何它都是錯誤的反向引用。 你需要\1
。 您還需要轉義定義捕獲組的括號。 因為sed
腳本用雙引號括起來,所以您需要轉義所有反斜杠。
$ echo "Hello089" | sed "s/\\(.*\\)/'\1',/g"
'Hello089',
(我不記得是否有一種方法可以使用 ASCII 代碼而不是文字來指定單引號'
,這將允許您在腳本周圍使用單引號。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.