【问题标题】:Command tr upper and lower extract命令 tr 上下提取
【发布时间】:2018-01-24 07:30:50
【问题描述】:

如果我想转换 - 字符之后的文本部分,例如 我可以使用tr 命令吗?

使用此命令将函数应用于所有文本

cat file.txt | tr [: upper:] [: lower:]

01103I-GG102
01103I-GG102
01103I-GG102
01103I-GG102
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'2
01103I-HH'3
01103I-HH'12
01103I-HH'12
01103I-HH'12
01103I-HH'12
01103I-HH'12
01103I-HH'12
01103I-HH'12
01103I-HH'22
01103I-HH'22
01103I-HH'22
01103I-HH'42
01103I-HH'42
01103I-HH'42
01103I-HH'42
01103I-HH'42
01103I-HH'42
01103I-HH'43
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG62
01103I-GG63
01103I-GG63
01103I-GG63
01103I-GG63
01103I-GG63
01103I-GG63
01103I-GG63
01103I-GG52

你能帮帮我吗?

谢谢

【问题讨论】:

  • 我的回答解决了你的问题吗?

标签: linux uppercase lowercase tr


【解决方案1】:

如果我是你,我会选择sed 解决方案。以下 sed 命令会按照您帖子中的要求转换您的输入文件(在- 之后变为小写)

$ sed 's/\(.*\)-\(.*\)/\1-\L\2/g' file
01103I-gg102
01103I-gg102
01103I-gg102
01103I-gg102
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'2
01103I-hh'3
01103I-hh'12
01103I-hh'12
01103I-hh'12
01103I-hh'12
01103I-hh'12
01103I-hh'12
01103I-hh'12
01103I-hh'22
01103I-hh'22
01103I-hh'22
01103I-hh'42
01103I-hh'42
01103I-hh'42
01103I-hh'42
01103I-hh'42
01103I-hh'42
01103I-hh'43
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg62
01103I-gg63
01103I-gg63
01103I-gg63
01103I-gg63
01103I-gg63
01103I-gg63
01103I-gg63
01103I-gg52

说明:

  • s/\(.*\)-\(.*\)/\1-\L\2/g 在替换模式下使用 sed 并捕获 - 周围的 2 个组,然后使用反向引用作为替换并使用 \L 将第二组(包含 - 之后的模式)转换为小写选项。

tr 用法:

如果您确定每行的第二部分只有 HG 并且它们没有出现在第一部分中,那么您可以想象像 tr 'HG...' 'hg...' 这样的东西,但这是最大的一点tr 命令可以做到。

【讨论】:

    【解决方案2】:

    @Allan 的sed 解决方案更好,但为了多样化,这里还有另一种方法。

    第一个<(...) 中的部分提取破折号之前的部分。第二个<(...) 中的部分提取破折号后的部分,并使用tr 对其进行转换。 paste 然后重新组装了这两个部分:

    paste -d- <(cut -f1 -d- file.txt) <(cut -d- -f2 file.txt | tr [:upper:] [:lower:]) 
    

    请注意,此技术是一种“bashism”,因此您需要使用bash shell。


    如果想要更多种类,您也可以使用awk

    awk -F- '{$2=tolower($2)} 1' OFS=- file.txt
    

    这就是说... “使用破折号 (-) 作为字段分隔符。将字段 2 中的字母更改为小写。打印结果 - 因为awk 的默认操作是打印 if满足条件,当1 评估为真时,它会打印。"

    【讨论】:

    • 很好的答案!!! :) :) 我会尽快投票(达到配额...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多