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)
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 分配'给每行打印',然后打印整行