使用sed
,我们如何从一行文本中剪切特定的字符串?
字符串 ->
Email subject: Test email one two
预期响应 ->
test email one two
任何在这方面提供的帮助都将不胜感激。
答案1
由于您想将所有内容转换为小写,因此使用sed
:
sed 's/^Email subject: \(.*\)/\L\1/' infile
sed
命令分解:
s
:断言执行替换/
:将命令与模式分开^
: 匹配行首Email subject:
匹配Email subject:
字符串\(.*\)
:匹配并分组任意数量的任意字符/
:将模式与替换字符串分开\L
:零宽度断言强制将以下模式打印为小写\1
: 用第一个捕获组替换的反向引用
答案2
如果我没记错的话,你想提取:
Email subject: Test email one two
仅限电子邮件的“实际”主题:
test email one two
因此下面的方法可以工作:
sed "s/^Email subject: //" test.txt | tr '[:upper:]' '[:lower:]' > output.txt
test.txt
是包含您的文本的文件。output.txt
仅包含后面的单词Email subject:
tr '[:upper:]' '[:lower:]
将所有大写字母转换为小写字母
答案3
我的看法awk
awk '{sub(/^Email subject: */,""); print tolower($_)}' \
<<< "Email subject: Today's subject: watch out for delimiters"
输出
today's subject: watch out for delimiters
答案4
使用纯bash
:
$ str='Email subject: Test email one two'
$ echo "${str#*: }"
Test email one two
如果希望第一个字母T
为小写:
$ str='Email subject: Test email one two'
$ echo "${str#*: }"
Test email one two
$ new="${str#*: }"
$ echo "${new,}"
test email one two
一体:
$ str='Email subject: Test email one two' && new="${str#*: }" && echo "${new,}"
test email one two
在这里我们使用bash
的参数扩展特征。
"${str#*: }"
将会得到我们Test email one two
即我们从开始到:
后面跟着一个空格(:
)"${new,}"
将第一个大写字符转换为小写