小编Wil*_*ett的帖子

为什么 Bash 历史记录没有记录这个命令?

该命令会printf "#!/bin/bash\n" > t生成一个错误 ( bash: !/bin/bash\n": event not found),但按向上键不会调用该命令,因此我可以对其进行修改。这是为什么?

(我在这里尝试的东西可以通过printf "%s\n" '#!/bin/bash' >t我尝试学习 Bash 并且真的想了解为什么 bash 历史记录没有捕获上一个printf命令来完成。)

command-line bash printf

7
推荐指数
1
解决办法
2658
查看次数

如何将文件的内容插入到bash中的字符串中

我想在字符串中的特定行之后附加多行文本文件的内容。例如,如果文件file.txt包含

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

我想这样做 printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/(^s2.+)/a $(<file.txt)"

要获得输出:

s1 random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff
Run Code Online (Sandbox Code Playgroud)

我尝试了引号和转义字符的各种组合,但似乎没有任何效果。在我的特定用例中,字符串将是一个 bash 变量,所以如果有一些深奥的东西可以让这变得更容易,那么最好知道。

我现在所做的工作是将字符串写入文件,使用 grep 找到我想在后面追加的行,然后使用 head、printf 和 tail 的组合将文件压缩在一起。似乎我不应该将文本写入文件来完成这项工作。

grep bash sed awk string

3
推荐指数
1
解决办法
6155
查看次数

需要将文件复制到现有目录并删除已有的同名但扩展名不同的文件

编辑:为了清楚起见,完全重写了问题。

我有一个目录树(新的),里面有一堆扩展名为 .new. 我有一个相同的树(),其中许多文件的名称与树中的文件名称相同,只是扩展名为.old. 我想将所有.new文件从新目录树复制到包含文件的目录树中.old。由于将带有.new扩展名的文件写入目录树,我想删除任何具有相同名称但带有.old扩展名的文件。

所以,如果在新的目录树中,有一个名为 的文件new/foo/bar/file.new,它会被复制到旧的目录树中old/foo/bar/file.newold/foo/bar/file.old如果它退出,则该文件将被删除。

编辑#1

这个答案在下面进行了讨论(使用具有令人困惑的无关背景信息的旧问题)。请参阅我在下面制定的实际解决方案作为答案之一。

command-line scripting find file-copy

2
推荐指数
1
解决办法
2213
查看次数

标签 统计

bash ×2

command-line ×2

awk ×1

file-copy ×1

find ×1

grep ×1

printf ×1

scripting ×1

sed ×1

string ×1