Makefile的目标在Linux上完成,但是AFAICS,而不是Mac OS(10.8.5).
是否可以使用此操作系统完成工作?
假设我有一个文件test.txt,包含:
$foobar$
$
foobar
$
$
foobar$
$foobar
$
$
foo
bar
$
$
foo
bar$
$foo
bar
$
Run Code Online (Sandbox Code Playgroud)
我希望每一对$...$都被替换\(...\),...可能包含新的线条.编辑:更确切地说,我希望以下替换:
\(foobar\)
\(
foobar
\)
\(
foobar\)
\(foobar
\)
\(
foo
bar
\)
\(
foo
bar\)
\(foo
bar
\)
Run Code Online (Sandbox Code Playgroud)
以下sed说明:
sed -e 's/\$\([^]]*\)\$/\\(\1\\)/g' test.txt
Run Code Online (Sandbox Code Playgroud)
只有在没有新线的情况下才能完成工作.
另一种可能性是使用两遍:
$为两个中的一个\($的\)但我不知道怎么说"两个中的一个".
考虑一个包含(仅)通过以下方式获得的3个文件的目录:
echo "foobar" > test1.txt
echo "\$foobar" > test2.txt
echo "\$\$foobar" > test3.txt
Run Code Online (Sandbox Code Playgroud)
(并且因此分别含有foobar,$foobar,$$foobar).
该grep指令:
grep -l -r --include "*.txt" "\\$\\$" .
Run Code Online (Sandbox Code Playgroud)
过滤包含双倍美元的文件(实际上是唯一文件):
$ grep -l -r --include "*.txt" "\\$\\$" .
./test3.txt
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在,该指令在makefile中失败,例如:
doubledollars:
echo "Here are files containing double dollars:";\
grep -l -r --include "*.txt" "\\$\\$" . ;\
printf "\n";\
Run Code Online (Sandbox Code Playgroud)
导致错误:
$ make doubledollars
echo "Here are files containing double dollars:";\
grep -l -r --include "*.txt" "\\\ . ;\
printf "\n";\ …Run Code Online (Sandbox Code Playgroud)