使用AWK或SED在文件的每一行前添加single_quote

时间:2019-05-01 22:00:04

标签: awk sed

我正在与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行

3 个答案:

答案 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'