Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用sed命令和readlink(或similar)将完整路径替换为文本_Bash_Sed - Fatal编程技术网

Bash 使用sed命令和readlink(或similar)将完整路径替换为文本

Bash 使用sed命令和readlink(或similar)将完整路径替换为文本,bash,sed,Bash,Sed,我正在编写一个BASH脚本,希望在其中使用sed将文件的完整路径替换为文本 我目前有: Path= readlink -e /home/user/Videos/*.mp4 sed -i "s/original_text/$Path/g" /home/user/Documents/Text.txt 其想法是将单个MP4视频(该文件夹中没有其他视频)的路径替换为文本文件,这样我就不必每次替换视频时都写入视频的名称 我尝试了不同的方法解决这个问题,但我不能让它工作 提前感谢。使用命令替换将命令的输出

我正在编写一个BASH脚本,希望在其中使用
sed
将文件的完整路径替换为文本

我目前有:

Path= readlink -e /home/user/Videos/*.mp4
sed -i "s/original_text/$Path/g" /home/user/Documents/Text.txt
其想法是将单个MP4视频(该文件夹中没有其他视频)的路径替换为文本文件,这样我就不必每次替换视频时都写入视频的名称

我尝试了不同的方法解决这个问题,但我不能让它工作


提前感谢。

使用命令替换将命令的输出保存在变量中:

Path="$(readlink -e /home/user/Videos/*.mp4)"
此外,在声明变量时,shell不支持
=
周围的任何空格


如果有多个文件,最好使用数组:

Paths=( $(readlink -e /home/user/Videos/*.mp4) )

并通过
“${Paths[@]}”

使用命令替换将命令的输出保存在变量中来访问数组元素:

Path="$(readlink -e /home/user/Videos/*.mp4)"
此外,在声明变量时,shell不支持
=
周围的任何空格


如果有多个文件,最好使用数组:

Paths=( $(readlink -e /home/user/Videos/*.mp4) )

并通过
“${Path[@]}”访问数组元素

我相信您的
$Path
具有
斜杠(/)
的值,例如
/home/user/Videos/foo.mp4
,这将使您的
sed
失败。您可以对sed的
s
命令使用其他分隔符

试试这句话:

sed -i "s@original_text@$Path@g" /home/user/Documents/Text.txt

你也应该引用你的
readlink
命令,并删除
=

后面的空格。我相信你的
$Path
斜杠(/)
的值,例如
/home/user/Videos/foo.mp4
,这会使你的
sed
失败。您可以对sed的
s
命令使用其他分隔符

试试这句话:

sed -i "s@original_text@$Path@g" /home/user/Documents/Text.txt

您还应该引用您的
readlink
命令,并删除
=

之后的空格。您得到的错误是什么?您得到的错误是什么?