【问题标题】:REGEXP: Add a character before the first occurrence of a digit in a lineREGEXP:在一行中第一次出现数字之前添加一个字符
【发布时间】:2019-12-22 13:52:52
【问题描述】:

我正在尝试找到一种解决方案,在一行中第一次出现数字之前添加符号 #。

Input:
NewYork1986
Paris20
tokyo1

Expected ouput:
NewYork#1986
Paris#20
tokyo#1

到目前为止,我已经尝试过:

sed 's/\([0-9].\).*/#\1/g'

Which gives me:
NewYork#19
Paris#20
tokyo1

我想我已经接近了,但有些东西不见了。

感谢您的帮助

【问题讨论】:

  • 也许sed 's/\([0-9][0-9]*\).*/#\1/g'(或者sed 's/\([0-9]+\).*/#\1/g'如果可行的话会更好)
  • 您在 sed 中使用 g,这意味着所有出现。所以你需要做的就是:sed 's/[0-9]/#&/'。找到第一个数字,并将其替换为 # 和任何匹配的 (&)

标签: regex shell awk sed


【解决方案1】:

这个 sed 应该适合你:

sed 's/[0-9]/#&/' file

NewYork#1986
Paris#20
tokyo#1
  • 如果没有g(全局)标志,您不需要匹配超过 1 个数字,因为您需要做的就是匹配每一行中的第一个数字。
  • &sed 正则表达式模式完全匹配的反向引用。

【讨论】:

  • @RavinderSingh13:“Boby Lapointe”是一位著名的法国歌手(死于 1972 年),他所有的歌曲都是文字游戏。非本地人很难理解。
【解决方案2】:

您可以试试awk

awk '{sub(/[0-9]/,"#&")} 1' Input_file

虽然上面是最简单的解决方案,但如果您只想使用参考方法进行操作,则可以尝试使用 GNU awkgensub 函数:

awk '
BEGIN{
  re="([^0-9]*)([0-9]+)(.*)"
}
{
  print gensub(re,"\\1#\\2\\3","1",$0)
}
' Input_file

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多