我正在编写一个 CSH 脚本并尝试从给定密钥的源字符串中提取文本。
!/bin/csh -f
set source = "Smurfs\n\tPapa\nStar Trek\n\tRenegades\n\tStar Wars\n\tThe Empire Strikes Back\n"
set toFind = "Star Trek"
set regex = "$toFind[\s]*?(.*?)[\s]*?"
set match = `expr $source : $regex`
echo $match
上面的代码不起作用,所以我遗漏了一些东西。我尝试将“星际迷航”目录放入其中而不是变量。我应该看到
Regenages
作为答案。如果我把“星球大战”代替“星际迷航”,我应该会看到The Empire Strikes Back
。
Google 搜索显示了使用 grep 的可能解决方案,例如
match = `grep -Po '<something>' <<< $source
我不知道该写什么
<something>
,我也不是 grep 专家。
在实际代码中,我正在从文件中读取文本。我只是在这里简化了事情。
想法?
以下并不是我问题的字面答案,因为我问了 csh 的问题,但是我使用 bash 编写了一个解决方案。
匹配正则表达式捕获组 在此输入链接描述
我使用Tutorial Point来调试。
mystring1=' asdf1@wxyz2 @@a!s#d@f@@ asdf2@wxyz2 b!t#e@g '
tofind='asdf1@wxyz2'
regex="${tofind}[[:space:]]*([.!@\#a-zA-Z0-9]+)"
[[ $mystring1 =~ $regex ]]
echo $'\n'
echo $'\n'
echo '***********************'
echo ${BASH_REMATCH[1]}
echo '***********************'