sed - 将来自特定 file/folder 名称的字符串合并到文本文件中
sed - Incorporate a string from specific file/folder names into text files
我尝试在文本文件的第一行添加一个字符串。
每个字符串的第一部分都是相同的。这里是“#Test:”。字符串的最后部分应包含从文件夹和文件名派生的数字。
文件夹名称仅由 1-52 之间的数字组成。每个文件夹中有 1-20 个文件,结构如下:
1(文件夹)
1_tree1(文件)
1_tree2(文件)
1_tree3 (文件)
...
2(文件夹)
2_tree1(文件)
2_tree2(文件)
2_tree3(文件)
...
...
操作系统是Ubuntu20.04.
我可以分别更改每个文件。例如,终端中的以下命令为第一个文件夹中的一个文件添加#Tree:1。
sed -i '1s/^/#Test:1 \n/' '/path/to/the/file'
但是,如果我尝试对文件夹中的所有文件执行此操作,我将无法继续。你能告诉我如何自动完成吗?我不一定限于 sed
.
谢谢。
这可能是您想要的,使用 GNU awk 进行“就地”编辑,BEGINFILE
(因此它甚至可以在空输入文件上工作),gensub()
:
find . -type f -exec awk -i inplace '
BEGINFILE { print "#Test:" gensub(".*/([0-9]+)_[^/]+$","\1",1,FILENAME) }
1' {} +
我尝试在文本文件的第一行添加一个字符串。
每个字符串的第一部分都是相同的。这里是“#Test:”。字符串的最后部分应包含从文件夹和文件名派生的数字。 文件夹名称仅由 1-52 之间的数字组成。每个文件夹中有 1-20 个文件,结构如下:
1(文件夹)
1_tree1(文件)
1_tree2(文件)
1_tree3 (文件)
...
2(文件夹)
2_tree1(文件)
2_tree2(文件)
2_tree3(文件)
...
...
操作系统是Ubuntu20.04.
我可以分别更改每个文件。例如,终端中的以下命令为第一个文件夹中的一个文件添加#Tree:1。
sed -i '1s/^/#Test:1 \n/' '/path/to/the/file'
但是,如果我尝试对文件夹中的所有文件执行此操作,我将无法继续。你能告诉我如何自动完成吗?我不一定限于 sed
.
谢谢。
这可能是您想要的,使用 GNU awk 进行“就地”编辑,BEGINFILE
(因此它甚至可以在空输入文件上工作),gensub()
:
find . -type f -exec awk -i inplace '
BEGINFILE { print "#Test:" gensub(".*/([0-9]+)_[^/]+$","\1",1,FILENAME) }
1' {} +