Bash脚本-如何从文本文件中删除行/单词?

普雷耶

用户输入书名和作者(从文本文件中)后,我无法从文本文件中删除一行

我尝试了这段代码

我做了什么:

    function remove_book
{
  echo "Title: "
  read title
  echo "Author: "
  read name

  echo $title $name < BookDB.txt
  echo "Book $title by $name successfully removed!"

  sed '/pattern to match/d' ./BookDB.txt  

  #echo "testing remove"
}

但是然后,它显示了这一点

即使这样显示,也实际上并未将其从文件中删除。

Title: 
The Hobbit
Author: 
J.R.R. Tolkien
The Hobbit J.R.R. Tolkien
Book The Hobbit by J.R.R. Tolkien successfully removed!
Harry Potter and the Deathly Hallows J.K. Rowling
The Maze Runner James Dashner
Life Without Limits Nick Vujicic
The Hobbit J.R.R. Tolkien

所需的输出:

1)  Add new book
2)  Remove existing book info
3)  Update book info and quantity
4)  Search for book by title/author
5)  Process a book sold
6)  Inventory summary report
7)  Quit
Please enter your option: 2
Title : Biography of Crocodile Dundee
Author : Crox Swamplund
    Error! Book does not exists!


1)  Add new book
2)  Remove existing book info
3)  Update book info and quantity
4)  Search for book by title/author
5)  Process a book sold
6)  Inventory summary report
7)  Quit
Please enter your option: 2
Title : C++ for dummies
Author : Edward Scissorhands
Book Title ‘C++ for dummies’ removed successfully!

(“期望的输出”的书名和作者的名字仅是示例)

Harry Potter and the Deathly Hallows J.K. Rowling
The Maze Runner James Dashner
Life Without Limits Nick Vujicic
The Hobbit J.R.R. Tolkien [remove one line, like this Hobbit book]

Harry Potter and the Deathly Hallows J.K. Rowling
The Maze Runner James Dashner
Life Without Limits Nick Vujicic

如何删除一行?用户输入标题和作者姓名后?帮帮我,谢谢!:)

温特穆特

请勿使用sed执行此操作。在某个时候,某处某人会写一本书,标题为“好时/坏时”或“ Ca $ h ca $ h ca $ h !!! 1!在业余时间赚钱!” 或“您一直想知道(从来不敢问)”的内容,而sed会把它搞砸了,因为特殊字符对其模式匹配引擎具有意义。

您可以使用GNU awk做到这一点,如下所示:

awk -i inplace -v title="$title" -v author="$name" '$0 != title " " author' BookDB.txt

这将从文件中选择所有与行的内容不完全相同的行,$title然后是一个空格,然后是的内容$name由于shell变量不会被替换为awk代码,而是通过awk的-v参数传递的,因此不会对特殊字符进行任何解释。

另外:您确定要就地执行此操作吗?我喜欢保留备份,以防操作出错。喜欢

cp BookDB.txt BookDB.txt~
awk -v title="$title" -v author="$name" '$0 != title " " author' BookDB.txt~ > BookDB.txt

然后,如果出现问题或您删除了错误的书,则回滚很容易。此外,这将与其他Aks一起使用,而不是GNU的awks。

另外,您可以像这样使用grep:

cp BookDB.txt BookDB.txt~
grep -vxF "$title $name" BookDB.txt~ > BookDB.txt

-x仅当匹配项是整行时,where才告诉grep进行匹配,并-F告诉其将模式作为固定字符串而不是正则表达式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用bash shell脚本检查文本文件中URL的状态

如何使用bash从文本文件中删除前两行和后四行?

如何使用bash / sed脚本删除文本文件的第一行?

bash,文本文件删除最后一行之前每行中的所有文本

从Bash中的另一个文本文件中删除文件中包含的单词

如何使用Shell脚本和sed删除文本文件中的字符串后缀?

如何编写文本文件,然后在相同的Bash脚本中读取文本文件?

如何使用bash脚本中的数据替换文本文件中的模板变量

如何使Tampermonkey用户脚本替换文本文件中的单词?

如何编写php脚本以删除与文件中其他行重复的行数据。当文本文件中的每一行用冒号分隔时

脚本:如何删除文本文件中的十六进制字符串

删除文本文件的脚本

Bash脚本读取文本文件中的随机行

如何使用sed从文本文件中删除脚本标签

Bash脚本仅乘以文本文件中的数字?

如何从文本文件BASH获取单词

提取文本文件最后一行中的最后一个单词的脚本

在POWERSHELL中运行脚本后,从文本文件中删除第一行

从文本文件外壳脚本中删除“空”行

Linux Bash和脚本编制-计算文本文件中的行

Perl或Bash脚本-文本文件中的前缀行以及文件中较早的文本

如何从bash中的文本文件中提取某些单词和值

如何将文本文件添加到 bash 脚本中,然后使用该文本文件

如果文件名不在文本文件中,如何从目录中删除文件?Bash 脚本

如何在 Bourn shell 脚本中删除文本文件中的重复行?

如何使用 bash 命令删除文本文件中匹配多个模式的行?

批处理文件脚本以在计数大于 > 时删除文本文件中的行

删除 bash 文本文件中第 10 列包含空字段的行

如何通过linux shell脚本从文本文件中删除包含空格的前n列