sed替换段落第一行中的字符串

yozzarian

我正在尝试使用fdupes自动执行定期检测和消除文件的功能。我得到了这个漂亮的脚本:

# from here:
# https://www.techrepublic.com/blog/linux-and-open-source/how-to-remove-duplicate-files-without-wasting-time/

OUTF=rem-duplicates_2019-01.sh;

echo "#! /bin/sh" > $OUTF;

find "$@" -type f -printf "%s\n" | sort -n | uniq -d |
    xargs -I@@ -n1 find "$@" -type f -size @@c -exec md5sum {} \; |
    sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
    sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/;' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF

这将产生具有以下结构的文件:

#! /bin/sh
#rm ./directory_a/file_a
#rm ./directory_b/file_identical_to_a

#rm ./directory_a/file_b
#rm ./directory_b/file_identical_to_b
#rm ./directory_c/another_file_identical_to_b

#rm ./directory_a/file_c
#rm ./directory_b/file_identical_to_c
#rm ./directory_c/another_file_identical_to_c
#rm ./directory_d/yet_another_file_identical_to_c

我想从每个段落的第一行中删除#标签以获取

rm ./directory_a/file_c
#rm ./directory_b/file_identical_to_c
#rm ./directory_c/another_file_identical_to_c
#rm ./directory_d/yet_another_file_identical_to_c

我一直在尝试修改倒数第二行,例如:

    sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/;s/\n\n#rm/\n\nrm/;' >> $OUTF;

但是无法管理SED来识别(\ n \ n)或我可以想到的本段开头的任何其他指针。我究竟做错了什么?

编辑:我无法编辑评论,所以这是最终的脚本:

TEMPF=temp.txt;
OUTF=rem-duplic_2019-01.sh

echo "#! /bin/sh" > $TEMPF;

find "$@" -type f -printf "%s\n" | sort -n | uniq -d |
    xargs -I@@ -n1 find "$@" -type f -size @@c -exec md5sum {} \; |
    sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
    sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $TEMPF;
awk -v a=2 '/^$/{a=2}!--a{sub(/#/,"")}1' $TEMPF > $OUTF

chmod a+x $OUTF; ls -l $OUTF
rm $TEMPF
oguz ismail

请改用awk:

awk '/^$/{a=1} !a--{sub(/#/,"")} 1' a=1 file
  • /^$/ { a = 1 }表示a如果当前行是空白行,则设置为1,
  • !a--是的简写a-- == 0,操作({ sub(/#/, "") }#从当前行中删除第一个
  • 1 表示打印所有行,
  • a=1需要#在shebang(即第二行)之后从该行中删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

sed 可以在一行中替换模式子字符串匹配中的单词吗?

用字符串替换文本文件中的第一行

Shell脚本-如何用空字符串替换第一行字符串?

获取haxe中字符串的第一行

在Python中将第一列第一行替换为字符串'date'

在Python中替换一行多行字符串?

如果第一行与模式匹配,则在文件的第一行插入sed字符串

将文件名替换为bash中多个文件中第一行的字符串

Notepad ++在包含字符串的行之后替换一行中的字符串

如何使用sed替换文件中每一行的字符串前的第n个空格

SED:如何使用Sed在字符串的第一个实例之后打印每一行?

如何从字符串文件中获取第一行和第 10 行

如何读取字符串的第一行?

如何读取字符串的第一行?

连接字符串跳过第一行

如何在txt文件的第一行中的每一行中写入字符串

如何使用sed在同一行中的数学字符串后转义特殊字符并插入字符串

从txt文件中读取字符串,然后在c ++中的第一行停止

为熊猫数据框的每一行替换一列中的字符串

查找并替换一行上的字符串

sed:在同一行中,一旦到达某个字符串,就停止重复模式替换

用上一行中的字符串替换列中的零(Python / Pandas)

使用同一行中的文本替换多行字符串中的文本

使用python替换一行中特定索引中的字符串

如何突出显示较长字符串中的第一行?

匹配文件中的字符串并仅打印匹配的第一行

读取文件的第一行并将其与外壳文件中的字符串进行比较

如何获得多行字符串中第一行的长度?

删除第一行中与子字符串匹配的制表符分隔的列