【问题标题】:How to use Linux command tools to remove numbers on the begin and end of a string?如何使用 Linux 命令工具删除字符串开头和结尾的数字?
【发布时间】:2014-08-23 11:20:26
【问题描述】:

假设我有以下文件:

!@#$@##!#!!@#
!@#--@#%#
12asd
test
12349490
123end
Start12
M1dle
Sup3rASF
Secret
FS123Num
MyStuff
VeryVeryLongWord
WowThisIs123!
!myStuff:)
2014Kces
@88Random
Word Tab
AnyWordhere:P

我想过滤它,使所有结尾或开头带有数字的单词都不会显示。例如,我想要这个输出:

!@#$@##!#!!@#
!@#--@#%#
test
M1dle
Sup3rASF
Secret
FS123Num
MyStuff
VeryVeryLongWord
WowThisIs123!
!myStuff:)
@88Random
Word Tab
AnyWordhere:P

以及如何应用类似的过滤器来删除以特殊字符开头或结尾的字符,例如 !、?、@ 等?

例如,生成这个输出:

!@#$@##!#!!@#
!@#--@#%#
test
M1dle
Sup3rASF
Secret
FS123Num
MyStuff
VeryVeryLongWord
!myStuff:)
Word Tab
AnyWordhere:P

在最后一个示例中,@88Random 和 WowThisIs123!也被删除了。但是中间有数字的仍然存在,比如Sup3rASF和M1dle。

如果有人可以帮助我在这两种情况下使用 Linux 工具进行过滤器,我会很高兴,但请记住,它应该与单词无关,因为我的文件很大,上面的字符串只是示例。

非常感谢。

【问题讨论】:

    标签: regex linux perl shell grep


    【解决方案1】:

    我想过滤它,使所有结尾或开头带数字的单词都不显示
    如何应用类似的过滤器来删除开头或结尾后跟特殊字符(例如!、?、@ 等)的过滤器?

    你可以使用egrep:

    egrep -v '^[0-9!?@]|[0-9!?@]$' file
    

    【讨论】:

      【解决方案2】:

      这是一个使用perl的选项:

      perl -ne 'print unless /^\d|\d$/' file   # removes numbers
      !@#$@##!#!!@#
      !@#--@#%#
      test
      M1dle
      Sup3rASF
      Secret
      FS123Num
      MyStuff
      VeryVeryLongWord
      WowThisIs123!
      !myStuff:)
      @88Random
      Word Tab
      AnyWordhere:P
      

      perl -ne 'print unless /^[\d!?@]|[\d!?@]$/' file  # removes numbers and some spl chars
      test
      M1dle
      Sup3rASF
      Secret
      FS123Num
      MyStuff
      VeryVeryLongWord
      Word Tab
      AnyWordhere:P
      

      虽然anubhava 建议egrep 就足够了。

      【讨论】:

      • 对于一长串标点符号,您可以使用/^[\d[:punct:]]|[\d[:punct:]]$/作为正则表达式。
      【解决方案3】:

      对于第一级过滤器,可以使用以下简单的正则表达式:

      perl -ne 'print if ! /^\d|\d$/' file
      

      对于第二种过滤器,您只需在每一端添加[:punct:]*即可。

      perl -ne 'print if ! /^[:punct:]*\d|\d[:punct:]*$/' file
      

      注意标点符号类是如何与数字分开的。那是因为您特别想过滤掉带有数字的行,而不仅仅是以标点符号开头和结尾的行。

      开关

      • -n:为输入文件中的每一行创建一个 while(<>){..} 循环。
      • -e:告诉perl 在命令行上执行代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 2011-11-19
        • 2011-11-02
        相关资源
        最近更新 更多