【问题标题】:Add text to specific text line将文本添加到特定文本行
【发布时间】:2013-05-30 07:14:37
【问题描述】:

我对 linux 编程有点陌生,我已经搜索了每个人,但我没有找到任何答案,我有一个文件,可以调用它,config.txt/.ini; 我的问题是:是否有脚本,在文件中找到一些文本,如果找到搜索文本做某事;


例如:

  • 搜索:'my/text/mytext'
  • 并添加:';'到行首。
  • 甚至删除该行。

【问题讨论】:

  • 如果您正在搜索“centos 编程”,您不会走得太远。您要么想要一个 bash 脚本,要么想要一种使用真正的脚本语言(如 python/perl/tcl)来执行此操作的方法。
  • 不像只有centos编程,更像是unix/linux通用编程。
  • 然后将其标记为 shell 脚本,而不是带有随机 Linux 发行版标签的垃圾邮件。谢谢。

标签: linux shell unix


【解决方案1】:

您是否考虑过使用以下工具:

  • awk
  • sed
  • perl
  • python

这一切都可以相当容易地做到这一点。

Awk 可能是其中最纤细的(因此也是最快的):

awk '{sub(/root/, "yoda"); print}'

将用每行上的字符串yoda 替换正则表达式root 的第一个匹配项。

【讨论】:

  • 删除行会是什么样子?
  • 阅读awk 手册。这就是全部。在{之前放置一个过滤器
  • 我会将sed 添加到列表中
  • 好吧,我尝试了 sed 和 awk,但 awk 给了我一些奇怪的错误,并且 sed 只是使该文件为空,我想要一些执行以下操作的脚本:sed 's/addons\/mani_admin_plugin\/bin\/sourcemod_mm/ /' addons/metamod/metaplugins.ini > addons/metamod/metaplugins.ini 我的意思是搜索字符串“addons/mani_admin_plugin/bin/sourcemod_mm”,并将其删除或替换为“空格”(空字符)。
  • 只是不要在您想从中读取文件的那一刻覆盖文件。使用临时文件或-i(就地)开关。
【解决方案2】:

由于您的问题含糊不清,并且您没有定义什么样的脚本,并且因为我目前正在学习 Python,所以我花时间编写了一个 python 脚本来删除 foo.txt 中包含“mytext”的行.对的,这是可能的。还有无数其他方法可以做到这一点。

import re

# Open the file and read all the lines into an array
f = open("foo.txt", "r")
lines = []; 
for line in f:
    lines.append(line)
f.close()

# Write all the lines back that don't match our criteria for removal
f = open("foo.txt", "w")
for line in lines:
    if re.search("mytext", line) == None:
    f.write(line)
f.close()

【讨论】:

  • 我认为是这样,所以它只会删除上面带有“mytext”的行对吗?
  • 是的。它将读取所有行,并用“w”打开文件,这将删除其中的任何内容,然后写出所有不包含“mytext”的行。
  • 嗯,好吧,我明白了,但它给了我这个错误,与“f = open(..." ` line 21: syntax error near unexpected token (' line 21: f = open("plugins .ini", "r");' `
  • 你为什么要在最后加一个'?
猜你喜欢
  • 2018-11-25
  • 2016-09-13
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2017-03-04
  • 1970-01-01
相关资源
最近更新 更多