我有一个变量,其中包含:
var="I am in digital india today i will go home))) and have a dinner"
我想从单词today
中删除直至并包含下一个右括号。输出应为:
I am in digital india )) and have a dinner
我尝试使用sed,但它不起作用:
$ echo $var | sed 's/today.*)//'
I am in digital india and have a dinner
可能有1-4个小括号。我需要删除第一个,然后单独留下。
答案 0 :(得分:1)
如果您正在使用Bash,请使用extglob
。要检查extglob
是否已启用,请命令shopt extglob
以及它是否已关闭命令shopt -s extglob
。然后:
$ echo "${var/today*([!\)])\)}"
I am in digital india )) and have a dinner
解释:
${var/foo/bar}
在变量foo
bar
$var
{第一次出现} *(PATTERN)
*([!\)])\)
匹配给定模式的零次或多次出现string fileNameAndExtension = "thisFile.pdf";
string fullPath = "../folder/files/" + fileNameAndExtension;
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileNameAndExtension );
Response.TransmitFile(fullPath);
Response.End();
在更多出现的" 不)后跟)" 答案 1 :(得分:1)
问题在于outFile.WriteLine("{0,-20}{1,-20}{2,-20}{3,-20}{4,-20}{5,-20}", 1, 2, 3, 4, 5, 6)
是贪婪的。它将匹配尽可能多的输入,这意味着.*
将匹配最后一个括号而不是第一个括号。在大多数其他正则表达式引擎中,您可以通过编写)
来关闭贪婪。 Sed不支持,因此您可以将.*?
更改为.
,以防止它与任何括号匹配。
[^)]
答案 2 :(得分:-1)
它有效...但我不知道你是否想要这样......
echo $var | sed 's/today.*.e)//'
echo $var | sed 's/today.*)/)/'