Kan*_*ooo 4 command-line bash swap sed
我想放入有时会更改的sudo gedit /etc/sysctl.conf一行vm.swappiness=10。
默认情况下,这条线不存在,所以我使用echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf.
如果我总是放置完全相同的行vm.swappiness=10,那么如果我想替换我可以使用sudo sed -i 's/vm.swappiness=10/vm.swappiness=1/g' /etc/sysctl.conf 但是因为可能存在vm.swappiness=12或其他东西,我想要 - 只需一个命令 - 来查找是否/etc/sysctl.conf存在行开始vm.swappiness=。然后,如果它确实存在,我想删除整行(然后通过附加&& echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf到该命令,它还将随后添加我想要的新配置行到最后。
但同样,由于一行中可能有很多不同的参数,因此最好将其全部删除,但最好仅更改数字(在 的右侧vm.swappiness=)。
你认为呢?用 1 到 3 个数字搜索vm.swappiness=x(x(x))会更好吗(当然,100 也存在...),如果它存在就替换(通过将其放入变量并使用命令像`sudo sed -i 's/$oldline/$newline/g'),如果不是,则附加vm.swappiness=10?
您可以使用awk进行此类替换。
awk '/^vm.swappiness/ {print "replacement"; found=1} !/^vm.swappiness/ {print $0} END {if (!found) {print "appended" }}' filename
Run Code Online (Sandbox Code Playgroud)
最后的filename参数是包含这些行的文本文件的名称。
上面的命令替换wm.swappiness以replacement(根据您的需要修改)开头的任何行。否则打印出原始行。
如果进行了替换,则会在found变量中记住它。因此,如果没有进行替换,则END块会附加一行appended字符串(这也应该被修改)。
(请注意,我没有考虑权限,这只是解决替换或附加问题)。
您可以使用
sed 's/vm.swappiness=[0-9]*/vm.swappiness=1/g' /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)
如果您不介意您的号码有多少位。
如果您想要最多 3 位数字,则需要扩展(现代)正则表达式而不是基本正则表达式 (BRE)。然后您需要提供-E参数
sed -E 's/vm.swappiness=[0-9]{1,3}/vm.swappiness=1/g' /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8941 次 |
| 最近记录: |