我想更改以下内容:
# Source
source=('10-nvidia-drm-outputclass.conf'
'20-nvidia.conf'
'linux-4.11.patch')
source_i686=("http://us.download.nvidia.com/XFree86/Linux-x86/$pkgver/NVIDIA-Linux-x86-$pkgver.run")
source_x86_64=("http://us.download.nvidia.com/XFree86/Linux-x86_64/$pkgver/$_pkg.run")
md5sums=('4f5562ee8f3171769e4638b35396c55d'
'2640eac092c220073f0668a7aaff61f7'
'897d9775dc484ab37934e7b102c5b325')
md5sums_i686=('8825cec1640739521689bd80121d1425')
md5sums_x86_64=('0e9590d48703c8baa034b6f0f8bbf1e5')
[[ $_pkg = NVIDIA-Linux-x86_64-$pkgver ]] && md5sums_x86_64=('1b74150e84fd99cc1207a51b9327112c')
成:
# Source
source=('10-nvidia-drm-outputclass.conf'
'20-nvidia.conf')
# 'linux-4.11.patch')
source_i686=("http://us.download.nvidia.com/XFree86/Linux-x86/$pkgver/NVIDIA-Linux-x86-$pkgver.run")
source_x86_64=("http://us.download.nvidia.com/XFree86/Linux-x86_64/$pkgver/$_pkg.run")
md5sums=('4f5562ee8f3171769e4638b35396c55d'
'2640eac092c220073f0668a7aaff61f7')
# '897d9775dc484ab37934e7b102c5b325')
md5sums_i686=('8825cec1640739521689bd80121d1425')
md5sums_x86_64=('0e9590d48703c8baa034b6f0f8bbf1e5')
[[ $_pkg = NVIDIA-Linux-x86_64-$pkgver ]] && md5sums_x86_64=('1b74150e84fd99cc1207a51b9327112c')
..注释掉source
和md5sums
中的最后一项并关闭数组()
)。
我只知道如何做1/4,并用{<1}}注释掉:
'linux-4.11.patch')
Sed版本:
sed "/'linux-.*patch'/s/^/#/"
答案 0 :(得分:1)
假设数组元素中没有()
个字符,文件中没有NUL字符
$ sed -zE 's/((source|md5sums)=\([^)]*)\n([^)\n]*\))/\1)\n#\3/g' input_file
# Source
source=('10-nvidia-drm-outputclass.conf'
'20-nvidia.conf')
# 'linux-4.11.patch')
source_i686=("http://us.download.nvidia.com/XFree86/Linux-x86/$pkgver/NVIDIA-Linux-x86-$pkgver.run")
source_x86_64=("http://us.download.nvidia.com/XFree86/Linux-x86_64/$pkgver/$_pkg.run")
md5sums=('4f5562ee8f3171769e4638b35396c55d'
'2640eac092c220073f0668a7aaff61f7')
# '897d9775dc484ab37934e7b102c5b325')
md5sums_i686=('8825cec1640739521689bd80121d1425')
md5sums_x86_64=('0e9590d48703c8baa034b6f0f8bbf1e5')
[[ $_pkg = NVIDIA-Linux-x86_64-$pkgver ]] && md5sums_x86_64=('1b74150e84fd99cc1207a51b9327112c')
-z
将导致立即读取整个文件-E
扩展正则表达式((source|md5sums)=\([^)]*)\n([^)\n]*\))
会导致source=(...)
或md5sums=(...)
匹配两半,后半部分包含最后一行\1)\n#\3
根据要求替换
如果已知行数是固定数,
sed '/^source=\|^md5sums=/ {N;N; s/\n/)\n#/2}' input_file
其中N;N
和2
将是行数减去一个