我有一个 file1.txt 文件,其中包含近40行,每行包含一个包名。 我有另一个文件 composer.json ,其中包含数百个包。我需要从 composer.json
中删除 file1.txt 的所有包FILE1.TXT
remote5/package40
remote1/package1
remote4/package3
...
remote1/package2
当前的composer.json
{
"name": "name/project_name",
"description": "sf project blabla",
...
"config": {
"installer-paths: {
"remote34/package345",
"remote21/package345",
"remote123/package345",
"remote384/package345",
"remote444/package345",
...
"remote1/package1",
"remote1/package2",
"remote4/package3",
...
"remote5/package40",
}
}
}
如您所见,文件不同,因此我无法使用此解决方案Remove Lines from File which appear in another File
通缉composer.json
{
"name": "name/project_name",
"description": "sf project blabla",
...
"config": {
"installer-paths: {
"remote34/package345",
"remote21/package345",
"remote123/package345",
"remote384/package345",
"remote444/package345",
...
}
}
}
这是我到目前为止一直在尝试的命令
for i in `cat file1.txt`; do echo $i && sed -i '/$i/d' composer.json; done
这不会改变 composer.json 。但是,下面的命令可以正常工作
sed -i '/remote4\/package3/d' composer.json
更新
grep -Fvxf file1.txt composer.json
输出完全是 composer.json 的内容
答案 0 :(得分:1)
grep
grep -Fvf <(sed 's/.*/"&",/' file1.txt) composer.json
使用json格式装饰搜索键并查找固定字符串匹配。
答案 1 :(得分:0)
显然,你的composer.json无效。 有了您的数据,您可以尝试
awk 'NR==FNR{a[$0];next} {b=$0;sub("[^\"]*\"","");sub("\"[^\"]*$","");if(!($0 in a))print b}' file1.txt composer.json