tr 可以使用正则表达式吗?

Jim*_*Jim 11 linux regular-expression tr

我有一个这样的文件:

AAAA  
BBBB  
CCCC   
DDDD   
etc  
Run Code Online (Sandbox Code Playgroud)

在单独的行中的单词。我想使用tr.
所以我尝试了以下方法:

1)在每个单词的开头添加引号,即 'AAAA

  • tr '^\w$' '\'\w$' <file.txt 不起作用
  • tr '^\w$' ''\w$' <file.txt 不起作用

以上两者都使命令行卡住。

2)要在最后添加引号,我试过:

tr '\n' ''\n' <file.txt 但这不起作用,命令行卡住了。

为什么这些正则表达式不适用tr

slm*_*slm 11

你不能用tr. 我会用它sed来代替。

例子

$ sed "s/^/'/" file.txt
'AAAA
'BBBB
'CCCC
'DDDD
Run Code Online (Sandbox Code Playgroud)

说要找到每一行的开头 ( ^) 并用单引号 ( ')替换它。

如果要将“单词”括在单引号中,可以使用以下形式的命令:

$ sed "s/\(.*\)/'\1'/" file.txt
'AAAA'
'BBBB'
'CCCC'
'DDDD'
Run Code Online (Sandbox Code Playgroud)

这次我们将行上的任何内容保存在临时变量 ( \1) 中。然后我们用 this 替换该行'\1'

这个命令可以缩写为这个,使用 GNU 特定的开关:

$ sed -r "s/^(.*)$/'&'/" file.txt
'AAAA'
'BBBB'
'CCCC'
'DDDD'
Run Code Online (Sandbox Code Playgroud)


Dra*_*oan 5

tr用于音译。一种流行的用法tr是更改字符串的大小写:

$ echo 'this is a test' | tr a-z A-Z
THIS IS A TEST
Run Code Online (Sandbox Code Playgroud)

的某些操作系统版本tr, 需要采用a-z形式[a-z],在这种情况下也应引用:

$ echo 'this is a test' | tr '[a-z]' '[A-Z]'
THIS IS A TEST 
Run Code Online (Sandbox Code Playgroud)

info您的系统上安装了软件包的信息,tr 页面有一些非常好的示例和tr命令的进一步解释:

info coreutils 'tr invocation'

对于您想要实现的目标,您可能想要使用 sed、perl 或 awk。

珀尔:

perl -pe "s/^/'/" file
Run Code Online (Sandbox Code Playgroud)

对于每一行,匹配行首 ( ^),替换为'

塞德:

sed "s/^/'/" file
Run Code Online (Sandbox Code Playgroud)

类似于 perl 示例

惊:

awk -v x="'" '{ print x$0 }' foo
Run Code Online (Sandbox Code Playgroud)

将变量 x 分配'给每行打印',然后打印整行