使用 sed,我们如何从一行文本中剪切特定的字符串?

使用 sed,我们如何从一行文本中剪切特定的字符串?

使用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,}"将第一个大写字符转换为小写

相关内容