我有一行代码可以在我的终端中正常工作:
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)
然后我在脚本中放入完全相同的代码行myscript.sh:
#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)
但是,现在运行时出现错误:
$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution
Run Code Online (Sandbox Code Playgroud)
基于其他问题,我尝试将shebang更改为#!/bin/bash,但我得到完全相同的错误.为什么我不能运行这个脚本?
我试图用cdargs包理解"cdargs-bash.sh"脚本.我在以下函数中有一个问题:
function _cdargs_get_dir ()
{
local bookmark extrapath
# if there is one exact match (possibly with extra path info after it),
# then just use that match without calling cdargs
if [ -e "$HOME/.cdargs" ]; then
dir=`/bin/grep "^$1 " "$HOME/.cdargs"`
if [ -z "$dir" ]; then
bookmark="${1/\/*/}"
if [ "$bookmark" != "$1" ]; then
dir=`/bin/grep "^$bookmark " "$HOME/.cdargs"`
extrapath=`echo "$1" | /bin/sed 's#^[^/]*/#/#'`
fi
fi
[ -n "$dir" ] && dir=`echo "$dir" | /bin/sed 's/^[^ ]* //'`
fi
if …Run Code Online (Sandbox Code Playgroud) 我基本上想要这样做:
cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'
Run Code Online (Sandbox Code Playgroud)
无需两次写表达式:
cat file | sed 's/<expression>/<replacement>/g'
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉sed不要打印与substitute命令中的正则表达式不匹配的行?
在Unix中,^允许您重复一个命令,其中一些文本替换为新文本.例如:
csh% grep "stuff" file1 >> Results
grep "stuff" file1
csh% ^file1^file2^
grep "stuff" file2
csh%
Run Code Online (Sandbox Code Playgroud)
是否有Vim等价物?很多时候,我发现自己在命令行上一遍又一遍地编辑小事.
我在Windows 7上使用GVim.
我想通过使用正则表达式替换来学习如何放置换行符.为此,我尝试使用\ r和\n元字符,但替换文本不显示正常的换行符.
例如,一开始我有:
line 1
line 2
Run Code Online (Sandbox Code Playgroud)

我使用以下替换表达式:
:%s/\n/\n\n/g
Run Code Online (Sandbox Code Playgroud)
然后GVim生成以下文本:
line 1^@^@line 2^@^@
Run Code Online (Sandbox Code Playgroud)

相反,如果我在替换表达式中使用\ r \n
:%s/\n/\r\n/g
Run Code Online (Sandbox Code Playgroud)
然后GVim生成以下文本:
line 1
^@line 2
^@
Run Code Online (Sandbox Code Playgroud)

那些^ @字符是什么?
如何正确使用替换表达式中的换行符?
我有一个css文件,我希望每次都添加一个空行}.
我怎么能在Vim中这样做?
一个人为的例子......给出了
FOO="/foo/bar/baz"
Run Code Online (Sandbox Code Playgroud)
这工作(在bash中)
BAR=$(basename $FOO) # result is BAR="baz"
BAZ=${BAR:0:1} # result is BAZ="b"
Run Code Online (Sandbox Code Playgroud)
这不
BAZ=${$(basename $FOO):0:1} # result is bad substitution
Run Code Online (Sandbox Code Playgroud)
我的问题是哪个规则导致这个[子shell替换]评估不正确?如果有的话,在1跳中执行此操作的正确方法是什么?
我想使用一个使用标准deparse(substitute(x))技巧的函数lapply.不幸的是,我只是得到了循环的论证.这是我完全没用的可重复的例子:
# some test data
a <- 5
b <- 6
li <- list(a1=a,b2=b)
# my test function
tf <- function(obj){
nm <- deparse(substitute(obj))
res <- list(myName=nm)
res
}
tf(a)
#returns
$myName
[1] "a"
Run Code Online (Sandbox Code Playgroud)
这很好.如果我使用lapply我得到[[1L]]或x匿名函数的参数.
lapply(li,function(x) tf(x))
# returns
$a1
$a1$myName
[1] "x"
$b2
$b2$myName
[1] "x"
Run Code Online (Sandbox Code Playgroud)
有没有办法获得以下?
$a1
$a1$myName
[1] "a1"
$b2
$b2$myName
[1] "b1"
Run Code Online (Sandbox Code Playgroud)
如果有更一般的东西deparse(substitute(x)),lapply我也渴望知道.
编辑:问题,而不是使用接受多个参数的匿名函数,因此可以使用对象的名称和对象本身不起作用,因为该tf函数只接受一个参数.所以这在这里不起作用......
我从excel电子表格中的客户端获得了大量数据库信息.我经常需要将这些数据插入/更新回数据库.
我经常使用excel通过将一堆单元连接在一起来生成插入和更新语句.有时,数据包括可以在其中包含单引号的文本单元格.如果不仔细处理,这些单引号将使SQL语句中断.
当将一堆单元格值连接在一起时,如何通过公式转义文本数据中的单引号,以便生成的SQL脚本有效?
我正在使用Sphinx来记录将部署在不同服务器中的Web服务.该文档中包含用户单击的URL示例,它们应该可以正常工作.我的问题是主机,端口和部署根目录会有所不同,必须为每个部署重新生成文档.
我尝试定义这样的替换:
|base_url|/path
.. |base_url| replace:: http://localhost:8080
Run Code Online (Sandbox Code Playgroud)
但生成的HTML不是我想要的(在生成的链接中不包括"/ path"):
<a href="http://localhost:8080">http://localhost:8080</a>/path
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题吗?
python documentation restructuredtext substitution python-sphinx