我正在与ffmpeg一起工作,并希望自动从多个较小的视频制作一个大视频。我可以使用列表文件,但是每一行必须为file 'name.ext'
。我不知道如何sed或awk不会将'
视为控制字符。有什么办法吗?
我尝试使用变量代替字符串file '
,尝试了两个语句脚本,其中我设置了file @
,然后使用另一个cmd将@
更改为{{1} },但每次都会失败
'
还在awk '{print "line @" $0}' uselessInfo.txt >goofy2.txt
sed '/@/\'/g' goofy2.txt >goofy3.txt
周围用"
尝试了sed行
答案 0 :(得分:1)
sed和awk都没有将'
视为控制字符。实际上,他们在您发布的代码中根本看不到'
- shell 不允许您在单个引号分隔的脚本中使用单引号。
您的问题不清楚。这是您要尝试的吗?
$ echo 'foo' | awk '{print "file \047" $0 "\047"}'
file 'foo'
$ echo 'foo' | sed 's/.*/file '\''&'\''/'
file 'foo'
$ echo 'foo' | sed "s/.*/file '&'/"
file 'foo'
如果没有,请编辑您的问题以澄清问题,并提供一个具体的示例供我们检验。
答案 1 :(得分:0)
如果您只想在每行的开头添加单引号:
> cat test.txt
a
b
c
> sed "s/^/'/" test.txt
'a
'b
'c
然后可以将其输出到示例中所需的任何文件。
我认为,解决您的问题的方法是不对命令行中单引号内的字符进行解释。这意味着,当您尝试对单个带引号的字符串中的引号进行转义时,此操作将不起作用,并且您只会在字符串中得到一个反斜杠。将其与用双引号引起来的字符串进行比较,我们可以看到反斜杠 在传递给命令echo
作为参数之前已得到解释。
> echo '\'
\
> echo "\""
"
答案 2 :(得分:0)
另一个有用的技巧是将单引号定义为变量
$ echo "part 1" | awk -v q="'" '{print "line " q $0 q}'
line 'part 1'