linux - 从命令行修改文本文件中的特定行

标签 linux shell awk sed command-line

我有一个文本文件“text.txt”,它包含一堆带文本的行(或空行)。

我正在尝试形成一个单一的 sed/awk 命令行命令,它可以让我注释掉任何类似的内容(通过在我指定的任何行号的开头添加一个“#”)。

例如,文本文件可能如下所示: A B C D 我想发出一个指定第 2 行的命令,所以它看起来像: A #B C D 如果可以指定行的范围,那么可以修改多行,例如“2-4”或 2,3,4”,这也会有所帮助。

我发现(对我而言)关于 sed 中的 -n 和 -e 选项的信息相互矛盾,并且无法完全按照我的希望工作。我正在使用 Kubuntu 18.04。

有什么建议吗?谢谢。

我一直在将我在其他问题中发现的概念串在一起,比如必须保留这条线,但在它的开头添加“#”,所以我有“s/(.*)/#$1/"作为后面的替换。

我认为它可以作为: sed '2,4!s/(.<em>)/#$1/' text.txt </em> 但是,我得到 s/.: Event not found. 这似乎有一些好的部分,但是,它并没有像我希望的那样工作,它只处理一行,而不是所有行 cat text.txt | sed -n '2{s/(. )/#$1/;p}'

最佳答案

这应该是 awk 的任务。在此解决方案中,创建一个变量名称 lines ,其中将包含您想要更改的行号(逗号分隔),只需提及其中包含逗号分隔值的任意数量的行号,这应该可以把戏在这里。在https://ideone.com/ajnNSU上测试成功

awk -v lines="2,3,4" '
BEGIN{
  num=split(lines,array,",")
  for(i=1;i<=num;i++){
    linechange[array[i]]
  }
}
FNR in linechange{
  $0="#" $0
}
1
' Input_file

关于linux - 从命令行修改文本文件中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62887981/

相关文章:

linux - 无法在用户定义的网络上发现 docker 容器

c - 通过 telnet 发送击键

sql - 在 shell 脚本中使用 psql 创建数据库将用户名作为数据库名称

shell - 使用 psql 命令行时引用字符串解释的问题

linux - 从 awk block 中调用另一个命令行应用程序

bash - 在不同文件的不同位置删除包含给定字符串的行

c++ - 尝试从方法返回指向对象的指针时出现段错误

java - 是否可以从 Python 运行 java 以创建 .png?

python - 按三列分组并创建表(最好的 awk)

python - 找不到文件错误 : [Errno 2] No such file or directory: 'ifconfig'