【问题标题】:How to get string without the last N characters? [duplicate]如何获取没有最后 N 个字符的字符串? [复制]
【发布时间】:2019-10-22 14:22:04
【问题描述】:

如果我在变量中有一个 bash 字符串。 我如何提取/检索除最后一个字符之外的字符串,如果我想提取到最后两个字符会有多容易?

例子:

# Removing the last character
INPUT="This is my string."
# Expected output "This is my string"

# Removing the last two characters
INPUT="This is my stringoi"
# Expected output "This is my string"

【问题讨论】:

  • OUTPUT=${INPUT::-1}?
  • 在mac上我们不能使用负值
  • 与 Mac 无关,是 Bash 版本。改用:${OUTPUT::${#INPUT}-1}
  • 在这一点上,/bin/bash 已经过时了,应该被简单地视为 macOS 的 POSIX 兼容外壳。如果您想使用更新的bash 功能,请安装最新版本或切换到zsh

标签: bash awk


【解决方案1】:

使用任何 POSIX shell:

OUTPUT="${INPUT%?}"  # remove last character
OUTPUT="${INPUT%??}" # remove last two characters
                     # and so on

【讨论】:

    【解决方案2】:

    示例:

    INPUT="This is my string."
    echo $INPUT |sed 's/.$//' # removes last character
    
    INPUT="This is my stringoi"
    echo $INPUT |sed 's/..$//' # removes last two character
    

    【讨论】:

    • 也许您还应该展示一个带有s/.\{3\}$//等间隔的示例
    • 是的,同样的方法也可以,谢谢通知..!! @oguzismail
    【解决方案3】:

    编辑:在此处添加通用解决方案。您可以在名为 awkremove_char 中提及要从行尾删除的字符数,然后它应该会相应地工作。

    awk -v remove_char="2" '{print substr($0,1,length($0)-remove_char)}' Input_file
    


    请您尝试关注一下。

    awk '{print substr($0,1,length($0)-1)}' Input_file
    


    第二个解决方案:使用 GNU awk 将字段分隔符设为无

    awk 'BEGIN{FS=OFS=""} {NF--} 1' Input_file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 2015-07-04
      • 2011-11-18
      • 2014-08-24
      • 2021-09-18
      • 2011-07-07
      • 2011-08-17
      相关资源
      最近更新 更多