如何使用awk从某个字符后的行中删除文本


12

如何使用awk删除某个字符“;”之后的所有文本 出现在我的文本文件的每一行上?(然后我需要在文本上运行循环)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
请通过这种方式向我们显示实际的文本文件,详细信息中的魔鬼。
terdon

我现在举个例子@terdon
Jenny

Answers:


18

有两种通用方法。

  1. awk的字段分隔符设置为该字符。然后,您可以通过以下方式获取所需零件$1

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. 用于gsub()将其替换为空字符串:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy

因此,以您的示例为例:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

这是一个答案sed-由于您实际上并未进行任何现场处理,因此awk可能会过大。

sed 's/;.*//'

1
+1,但基于OP的评论,我假设这都是较大脚本的一部分。@Jenny,顺便说一下,这是您应该在问题中包括的细节。
terdon


0

有时,您可能希望将某个单词后的所有字符替换为另一个字符串。例如:

original_string="abc blabla foo bar" 而您想将blabla之后的单词替换为“ hello world”

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.