sed:如何确定第1行是否包含在第2行中
我的文本文件按字母顺序排序。我想确定每一行是否包含在下一行中,如果是,请删除这两行中的第一行。例如,如果我有sed:如何确定第1行是否包含在第2行中,sed,Sed,我的文本文件按字母顺序排序。我想确定每一行是否包含在下一行中,如果是,请删除这两行中的第一行。例如,如果我有 car car and trailer train 。。。我想以 car and trailer train 我找到了“sed one liners”页面,其中包含搜索重复行的代码: sed'$!N/^(.*)\n\1$/!PD' 。。。我想删除“^”就行了,但事实并非如此 (使用非连续的行也很好,但我的文件可以运行数千行,运行脚本可能需要数小时或数天。)原始命令 sed '$!N
car
car and trailer
train
。。。我想以
car and trailer
train
我找到了“sed one liners”页面,其中包含搜索重复行的代码:
sed'$!N/^(.*)\n\1$/!PD'
。。。我想删除“^”就行了,但事实并非如此
(使用非连续的行也很好,但我的文件可以运行数千行,运行脚本可能需要数小时或数天。)原始命令
sed '$!N; /^\(.*\)\n\1$/!P; D'
查找精确的线条匹配。由于要检查第一行是否包含在第二行中,因此需要添加一些通配符:
sed '$!N; /^\(.*\)\n.*\1.*$/!P; D'
应该这样做。原始命令
sed '$!N; /^\(.*\)\n\1$/!P; D'
查找精确的线条匹配。由于要检查第一行是否包含在第二行中,因此需要添加一些通配符:
sed '$!N; /^\(.*\)\n.*\1.*$/!P; D'
应该这样做。你说:
使用非连续的行也很好
下面是一个bash
脚本,用于删除另一行中包含的所有较短行,不一定是连续的,不区分大小写:
#!/bin/bash
# sed with I and Q are gnu extensions:
cat test.txt | while read line; do
echo Searching for: $line
sed -n "/.$line/IQ99;/$line./IQ99" test.txt # or grep -i
if [ $? -eq 99 ]; then
echo Removing: $line
sed -i "/^$line$/d" test.txt
fi
done
测试:
你说:
使用非连续的行也很好
下面是一个bash
脚本,用于删除另一行中包含的所有较短行,不一定是连续的,不区分大小写:
#!/bin/bash
# sed with I and Q are gnu extensions:
cat test.txt | while read line; do
echo Searching for: $line
sed -n "/.$line/IQ99;/$line./IQ99" test.txt # or grep -i
if [ $? -eq 99 ]; then
echo Removing: $line
sed -i "/^$line$/d" test.txt
fi
done
测试:
sed是一个很好的工具,用于在一行上进行简单替换,对于任何其他内容,只需使用awk:
awk '$0 !~ prev{print prev} {prev=$0} END{print}' file
sed是一个很好的工具,用于在一行上进行简单替换,对于任何其他内容,只需使用awk:
awk '$0 !~ prev{print prev} {prev=$0} END{print}' file
忽略大小写将是一个加号。因为您的RE在末尾包含一个符号
$
,这意味着line1完全匹配line2而不是line1包含在line2中。作为相关建议,我们为什么不简单地编写几行python代码来完成此任务呢?忽略大小写将是一个加号。因为您的RE在末尾包含一个符号$
,这意味着line1与line2完全匹配line2而非line1包含在line2中作为相关建议,我们为什么不简单地编写几行python来完成这项任务呢?否:根据我的示例,echo$'cat\ncat and dog\nhouse\nmoney\ngold and money\n'
,这张打印的house
。谢谢你们的编辑。在我的手机上,所以我只是从OP中复制了cmd,没有发现括号丢失。:)@F.Hauri house应该打印,因为它后面的行不包含house。否:对于我的样本,echo$'cat\ncat和dog\nhouse\nmoney\ngold和money\n'
,这张打印的house
。谢谢你们的编辑。在我的手机上,所以我只是从OP中复制了cmd,没有发现括号丢失。:)@F.Hauri house应该打印,因为它后面的行不包含house。这非常有用!谢谢大家!!这很有帮助!谢谢大家!!