如何使用脚本在终端中编辑文本文件的特定行?

如何使用脚本在终端中编辑文本文件的特定行?

.config每次程序无法按预期运行时,我都需要更改文本文件。我希望能够在终端中执行此操作,最好使用别名并按照以下逻辑:

alias config='change line 17 to this THEN run this command THEN replace line 17 with what was at beginning'

因此,当我进入config终端时,有问题的行将被更改,之后将运行一个命令,之后该行将设置为开始时的状态

答案1

这听起来很像创可贴和XY问题最好弄清楚核心问题。不过,这些命令可以满足您的需要。我已将其编写为 shell 函数,而不是别名,只需将这些行添加到您的~/.bashrc文件中:

fix_config(){
    ## Change current working directory to the directory where .config file is located
    cd /path/to/config_file
    ## The original 17th line
    old="$(sed '17q;d' .config)"
    ## The one you will replace it with
    new="new line"
    ## The sed command that does the replacing
    sed -i.bak "17 s/$old/$new/" .config
    ## Run whatever needs to be run with the modified file
    command
    ## Copy the file back
    cp .config.bak .config
    ## Go back to the old working directory
    cd $OLDPWD
} 

然后您可以通过运行来运行它fix_config

答案2

以下是一个详细的 Python 脚本解决方案。虽然不是您真正想要的,但仍然是一个解决方案:

#!/usr/bin/python3

import os

# change the lines below to the correct paths
path_to_configfile = "path_to_configfile" # the real one in  /etc/dhcp/dhclient.conf
path_toconfigfile_a = "path_toconfigfile_a"
path_toconfigfile_b = "path_toconfigfile_b"
# change the line to the default line in the config file (leave the \n)
old_line = "old_line\n"
# change to the line number to check as an indicator
line_number = 17 # first line =  1
# change to the messages you'd like to see
config1_message = "config 1 is activated"
config2_message = "config 2 is activated"

with open(path_to_configfile) as defaultconfig:
    defaultconfig = defaultconfig.readlines()

if defaultconfig[line_number-1] == old_line:
    os.system('gksudo cp '+"'"+path_toconfigfile_a+"'"+" "+"'"+path_to_configfile+"'")
    os.system('zenity --info --text '+'"'+config1_message+'"')
else:
    os.system('gksudo cp '+"'"+path_toconfigfile_b+"'"+" "+"'"+path_to_configfile+"'")
    os.system('zenity --info --text '+'"'+config2_message+'"')

使用方法:

  • 在安全目录中创建一个文件夹来存储配置文件的两个版本。
  • 创建一个~/bin文件夹。
  • 将上面的代码复制到一个文件中,并将其命名为 toggle_config(或任何您喜欢的名称)。
  • 将头部部分的线条更改为您希望在切换设置时看到的正确路径、线条和消息
  • 保存文件并使其可执行。将其存储在中~/bin,或将其复制到/usr/bin以获得更高的安全性。

注销/登录后,您可以通过以下命令在两个设置版本之间切换

toggle_config

系统将要求您输入密码,并且您将看到如下消息:

在此处输入图片描述

或者,您可以使用命令创建一个.desktop 文件并将其锁定到启动器,以便在设置之间快速切换。

相关内容