相关疑难解决方法(0)

提取与“sed”匹配的正则表达式而不打印周围的字符

致所有的“sed”医生:

你怎么能得到'sed'来提取它在一行中匹配的正则表达式?

换句话说,我只想要与正则表达式相对应的字符串,其中包含行中的所有非匹配字符都被剥离。

我尝试使用如下所示的反向引用功能

regular expression to be isolated 
         gets `inserted` 
              here     
               |
               v  
 sed -n 's/.*\( \).*/\1/p 
Run Code Online (Sandbox Code Playgroud)

这适用于某些表达式,例如

 sed -n 's/.*\(CONFIG_[a-zA-Z0-9_]*\).*/\1/p 
Run Code Online (Sandbox Code Playgroud)

它巧妙地提取了所有以 'CONFIG_ ....' 开头的宏名称(在某些 '*.h' 文件中找到)并逐行打印出来

          CONFIG_AT91_GPIO
          CONFIG_DRIVER_AT91EMAC
                   .
                   .   
          CONFIG_USB_ATMEL
          CONFIG_USB_OHCI_NEW
                   .
                 e.t.c. 
Run Code Online (Sandbox Code Playgroud)

但是上面的内容分解为类似的东西

  sed -n 's/.*\([0-9][0-9]*\).*/\1/p 
Run Code Online (Sandbox Code Playgroud)

这总是返回个位数,如

                 7
                 9
                 .
                 .  
                 6
Run Code Online (Sandbox Code Playgroud)

而不是提取连续的数字字段,例如。

              8908078
              89670890  
                 .
                 .  
                 .
               23019   
                 .
               e.t.c.  
Run Code Online (Sandbox Code Playgroud)

PS:我将非常感谢关于如何在“sed”中实现这一点的反馈。我知道如何使用“grep”和“awk”来做到这一点我想知道我对“sed”的理解(尽管有限)是否有漏洞,以及是否有办法在我
拥有的“sed”中做到这一点简直被忽视了。

sed

27
推荐指数
3
解决办法
6万
查看次数

在 shell 变量中捕获命令后的参数(括号之间)

假设我有一个文件,其中包含许多其他内容,

\command{arg1,arg2,arg3}

(参数是路径,用/, ., 字符和数字表示)

但是用户也可以调用它

\command{arg1,
arg2 ,
arg3
}
Run Code Online (Sandbox Code Playgroud)

也就是说,在几行上并且有多余的空格。

我想找到一个常规模式以包含在 shell 脚本中,以便 n 个变量将包含 n 个参数。如何进行 ?


我设法写

echo "\command{arg1,
    arg2 ,
    arg3
    }" | sed -n -e 's/\\command//p' | sed 's/,/\n/' | sed 's/{\|}//'
Run Code Online (Sandbox Code Playgroud)

但这只是输出arg1,我什至不确定如何将它存储在变量中。

有关的:

但我无法将所有这些成分结合起来得到我想要的。

grep bash sed regular-expression

5
推荐指数
1
解决办法
768
查看次数

使用 Bash 从文本文件中提取标记的字符串

我有以下样式的文件 - 这些是参数化的配置文件;#根据环境,字符中的值被替换为来自数据库的真实值。

ABC=#PARAMETER_1#:#PARAMETER_2#
SOMETHING_ELSE=#PARAMETER_1#
SOMETHING_NEW=#PARAMETER_2##PARAMETER_3#
Run Code Online (Sandbox Code Playgroud)

我想从这些文件中提取哈希/磅 ( #) 字符之间的值,以便我可以轻松识别所需的参数。没有标准的列宽或类似的东西,唯一的标准是两个#字符之间的任何东西都被数据库中的值替换。

这是理想的清理、重复数据删除输出:

PARAMETER_1
PARAMETER_2
PARAMETER_3
Run Code Online (Sandbox Code Playgroud)

我见过这个问题,但关键的区别在于,在我的情况下,特定行上可以有任意数量的变量。

我已经用 Bash 标记了这个问题,但它不一定是,它可以是 perl 等,它只需要从 Unix 中的命令行运行。

bash awk

1
推荐指数
1
解决办法
1110
查看次数

标签 统计

bash ×2

sed ×2

awk ×1

grep ×1

regular-expression ×1