linux - 如何删除与数组中共享的字符串匹配的行
问题描述
我有一个文件,其中包含如下文本
compile_tool/opt/CSDTK/bin/chipgen/Modem2G/toolpool/plugins/Calib/libcalibplugin.so
compile_tool/opt/CSDTK/bin/chipgen/Modem2G/toolpool/plugins/Calib/libcalibplugin.dill
compile_tool/opt/CSDTK/bin/lib/ruby/gems/1.8/gems/builder-2.1.2/Rakefile.pg
compile_tool/opt/mingw32_3.4.4/usr/i586-mingw32msvc/include/mmsystem.c
compile_tool/opt/mingw32_3.4.4/usr/i586-mingw32msvc/include/winnt.h
compile_tool/opt/CSDTK/bin/lib/ruby/gems/1.8/gems/builder-2.1.2/test/test_xchar.HEX
我想删除文件扩展名为 .so 、 .dill 、.pg 和 .HEX 的行。我试过下面的代码,但没有弄明白。
#! /bin/bash
array=(.a .so .bin.ihex .dll .exe .gem .bin .png .HEX)
for a in "${array[@]}"
do
sed -i -e "/\$a\b/d" copyright
done
解决方案
如果您sed
支持\|
(or)
正则表达式中的运算符,请尝试:
array=(.a .so .bin.ihex .dll .exe .gem .bin .png .HEX)
pat="$(IFS='|'; echo "${array[*]}" | sed -e 's/|/\\|/g' -e 's/\./\\./g')"
sed "/\($pat\)\$/d" copyright
- 它连接数组元素并生成一个模式字符串,如下所示:
\.a\|\.so\|\.bin\.ihex\|...
. - 然后该行
sed "/\($pat\)\$/d" text
删除与模式匹配的行。
请注意,您的数组元素和您的文本"line which is having file extension .so , .dill ,.pg and .HEX"
可能不一致。我按原样使用了你array
的。
推荐阅读
- python - 禁止输出以仅显示用法和文档字符串
- php - 将运行时常量值存储在函数区域设置静态变量中以加速多个调用是好还是坏的做法?
- oracle - MAximo 工单总人工成本和总材料成本
- javascript - 如何在 html 框中使用 CSS 添加多个文本?
- python - Julia 中的 one(c) 与 -one(c)
- java - Java 8 Streams how to avoid filtering with map or set?
- node.js - Which version of Socket.IO am I running?
- angularjs - 在 n 行后插入分页符
- python - 将两个包含单词的列表作为输入,形成一个包含两个单词的元组,每个列表中的一个单词的每个单词的首字母相同
- python - 根据行条件分配组号 [Python]