我正在尝试使用bash来修复一些具有数学模式符号的SVN提交,因为我为我的报告创建了一个神奇的SVN到LaTeX纸张生成器。我正在尝试在其中找到包含插入符号(^
)的任何内容并将\(match\)
放入其中。
到目前为止我所拥有的:
MYVAR="This is not x^2 good without y^2x^3 extra latex brackets"
echo $MYVAR | sed -e '\b\w*([\^])\w*\b/g'
但我不清楚如何进行多场比赛并放置\(match\)
。
我想最后的字符串是:
"This is not \(x^2\) good without \(y^2x^3\) extra latex brackets"
任何例子都将不胜感激。我有某种心理障碍。
答案 0 :(得分:2)
没有sed,但你可以使用Perl:
echo "$MYVAR" | perl -pe 's/([\w^]+^[\w^]+)/\/\(\1\)\//g'
( # Start a capturing group
[ # Start a character set
\w # Match words (alphanum & underscores)
^ # Match carets
] # Close character set
+ # Match 1 or more of previous token
\^ # Match Escaped caret
[ # Start a character set
\w # Match words (alphanum & underscores)
^ # Match carets
] # Close character set
+ # Match 1 or more of previous token
) # Close capturing group
\/ # Escaped /
\( # Escaped (
\1 # Captured token #1
\) # Escaped )
\/ # Escaped /
答案 1 :(得分:1)
sed 's,[^^[:space:]]*^[^[:space:]]*,\\(&\\),g'
[^^[:space:]]*^[^[:space:]]*
将匹配包含至少一个插入符号的任何非空格字符集。
\\(&\\)
&符号将被整个匹配替换,并用括号括起来。
答案 2 :(得分:1)
func configureCell(item:Item,image:UIImage?){
self.item = item
if image != nil{
//The image exist so you assign it to your UIImageView
img.image = image
}else{
//Create the request to download the image
}
}
之类的表达式可以描述为“由y^2x^3
”组成的字符组包围的“^
”。使用GNU sed(使用^
选项,所以我们不必太多逃避),你可以表达为
-r
或更多,带括号表达式(不能在那些中使用(\w|\^)+\^(\w|\^)+
)
\w
要将它们放在[[:alnum:]^]+\^[[:alnum:]^]+
之间,我们进行替换以添加括号:
\( \)
我稍微扩展了这个例子,以展示它在字符串的开头或结尾是如何工作的。
这远非万无一失:它会很乐意接受$ myvar="a^2 This is not x^2 good without y^2x^3 extra latex brackets b^5"
$ sed -r 's/(\w|\^)+\^(\w|\^)+/\\(&\\)/g' <<< "$myvar"
\(a^2\) This is not \(x^2\) good without \(y^2x^3\) extra latex brackets \(b^5\)
和其他无意义的表达。
为了使这更便携,请说POSIX sed兼容,我们必须坚持基本的正则表达式,不能使用交替或^^^
:
+
最后一个表达式在匹配的开头和结尾需要sed 's/[[:alnum:]][[:alnum:]^]*\^[[:alnum:]^]*[[:alnum:]]/\\(&\\)/g' <<< "$myvar"
以外的字符,因此^
可以正常,但x^2
,^2
和{{ 1}}不会匹配。
替换中的2^
代表完整匹配,^^^
必须转义才会显示在结果中。