我正在处理一些文本,这些文本在括号 [] 之间充满了我不想要的东西。因为我可以自己删除括号,所以我不需要单行为我做这件事,但我确实需要一个单行来删除它们之间的所有内容。
括号 () 而不是方括号呢?
这个问题来自 如何删除多行文本文件中大括号之间的所有文本?(只是一样,但没有嵌套的要求)。
例子:
This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.
Run Code Online (Sandbox Code Playgroud)
应该变成:
This is
that wants
anyway.
Run Code Online (Sandbox Code Playgroud)
是否可以使用某种单行 bash 命令(awk、sed、perl、grep、cut、tr...等)来做到这一点?
假设我有一个文件,其中包含许多其他内容,
\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
,我什至不确定如何将它存储在变量中。
有关的:
但我无法将所有这些成分结合起来得到我想要的。
我有一个包含许多大括号单词的文件,例如。{test1}, {test2} - 我将如何grep
为这些单词输出一个不同的列表?
输出示例:
{test1}
{test2}
Run Code Online (Sandbox Code Playgroud)
我试过这个没有用:
grep -o {.*} file.xml | sort | uniq
Run Code Online (Sandbox Code Playgroud)
实际上 - 这似乎有效:
grep -oP '{.*?}' file.xml | sort | uniq
Run Code Online (Sandbox Code Playgroud)