我有一组包含键值对或翻译的字符串格式30+文件的第N行:如何删除一堆文件
key=some text
有时候我想删除这些部分按键文件和我所做的是打开其中一个,找到包含我要删除的密钥的行(例如,第310行),然后从其他文件中手动删除该行。这些文件中的键是按字母顺序排序的,因此如果一个键出现在文件的第310行上,那么它就出现在每个其他文件的第310行中。
什么是一个简单的方法,从一堆文件中删除数字(例如,第310行)的行?
我有一组包含键值对或翻译的字符串格式30+文件的第N行:如何删除一堆文件
key=some text
有时候我想删除这些部分按键文件和我所做的是打开其中一个,找到包含我要删除的密钥的行(例如,第310行),然后从其他文件中手动删除该行。这些文件中的键是按字母顺序排序的,因此如果一个键出现在文件的第310行上,那么它就出现在每个其他文件的第310行中。
什么是一个简单的方法,从一堆文件中删除数字(例如,第310行)的行?
扩展user000001的想法,这是一个更一般的方法。
sed -i.bak "$(grep -n keyTarget keyFile|sed 's/:.*$//')d;" files*
假设你的sed支持-i选项(大部分都是这样)。
你甚至可以把它放在一个脚本中,而不是每次编辑keyTarget
,你只需要使用一个命令行参数而不是keyTarget
,${@}
。
要确认你希望这会工作,确认你只能从内部部分
grep -n keyTarget keyFile|sed 's/:.*$//'
得到一个行号回来,直到你很肯定的是,你永远也找不到地方行号都关闭的情况下,我会将整个文件集合保存到备份目录。
让脚本支持编辑多个目标会有风险,但可以完成。如果你喜欢这个,它可以满足你的需求,但是你可以使用多个目标,发布一个新问题,显示你被卡住的地方。
IHTH
sed -i '' '310d' file1 file2 ...
将所有文件指定的保持没有备份副本删除线310。 由您定义的全过程是这样的:
KEY=mykey
FILE1=myfile
ALL_FILES="file1 file2 ..."
sed -i '' $(grep -n "^$KEY=" $FILE1 | head -1 | sed -E 's/^([0-9]+):.*/\1/')d $ALL_FILES
,但更简单的方法是:
KEY=mykey
ALL_FILES="file1 file2 ..."
sed -i '' "/^$KEY=/d" $ALL_FILES
,意思是“删除每行开头‘的myKey =’从$ ALL_FILES保持没有备份副本”。
是的,实际上这是一个更好的主意,因为您不必担心“所有文件**真的**在#310行具有相同的值?”。祝你们好运。 – shellter
要从一堆文件中删除第310行,您可以执行'sed -i.bak'310d'文件*' – user000001
完美,这就是我一直在寻找的! –