如何用sed将字符串中所有拉丁字母的单词加倍?

How to double all words of latin letters in the string with sed?

我试图将字符串中的所有拉丁词加倍,实际上我们还需要将其放在括号中。 ("lol" -> “(笑)”) "Word"这里表示拉丁字母的顺序([A-Za-z]\+)。我尝试了很多,例如:

1) ls -l /bin | sed "s/[^ ][A-Za-z][^ ]/(&&)/g",但即使有特殊符号和数字,它也会加倍所有符号

2) 我还有一个想法,把所有不合适的词都放在“|”中括号:
(ls -l /bin | sed "s/[^ ][^A-Za-z ][^ ]/|&|/g") 然后将所有没有括号的单词加倍(还没想好怎么做)并删除 '|'括号。我意识到使用 3 个 sed 命令是无效的,并且可能有 '|'序列中的符号(虽然我知道如何解决这个问题)。

经过几天的努力,我决定寻求帮助。

这里有一些例子:

1)"rwx" -> "(rwxrwx)"

2) "-rwx" -> "-rwx"

3)"jk2l"->"jk2l"

4)"jkl" -> "(jkljkl)"

现在字符串示例:

1) "I want 2 sh-w" -> "(II) (wantwant) 2 sh-w"

2) "-rwx but th1-s" -> "-rwx (butbut) th1-s"

我要为这个任务推荐 awk:

$ cat file
rwx
-rwx
jk2l
jkl
I want 2 sh-w
-rwx but th1-s

$ awk '{ for (i=1; i<=NF; ++i) if ($i ~ /^[A-Za-z]+$/) $i = "(" $i $i ")" }1' file
(rwxrwx)
-rwx
jk2l
(jkljkl)
(II) (wantwant) 2 sh-w
-rwx (butbut) th1-s

这可能对你有用 (GNU sed):

sed -r ':a;s/(^|\s)([[:alpha:]]+)(\s|$)/()/g;ta' file

这会匹配仅包含字母字符的单词并以所需的样式替换它们,然后再次重复匹配,以便在第一遍中找到任何遗漏的匹配项。