病娇chara:Bash:在字符之间设置文件(cat chara)

我已经尝试了各种解决方案,以找到一个很好的方法来通过一个以特定单词开头的文件,并以特定单词结尾。

假设我有一个名为states.txt的文件包含:

Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois 
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana 
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania 
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming

我想 catstates.txt并获得以下以Idaho开头并以South Dakota结尾的状态。

我也想忽略这样一个事实,即状态是按字母顺序排列的(我要去的实际文件内容不是这样的顺序)。

结果应如下所示:

Idaho
Illinois 
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana 
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania 
Rhode Island
South Carolina
South Dakota

感谢您在此方面的时间和耐心。我感谢您提供的任何帮助。

8
awk '/Idaho/{f=1} f; /South Dakota/{f=0}' file

请参阅Explain awk command了解更多 awk 范围习语。

不要养成使用/start/,/end/的习惯,因为它使琐碎的事情变得非常简短,但即使是最轻微的需求变化(例如不打印边界线)也需要完全重写或重复的条件。

例如,给定此输入文件:

$ cat file
a
b
c
d
e

打印 b 和 d 之间的线,然后排除任一或两个边界线:

$ awk '/b/{f=1} f; /d/{f=0}' file
b
c
d
$ awk 'f; /b/{f=1} /d/{f=0}' file
c
d
$ awk '/b/{f=1} /d/{f=0} f;' file
b
c
$ awk '/d/{f=0} f; /b/{f=1}' file
c

如果您的起点是awk '/b/,/d/' file,请尝试并注意所需的其他语言结构和重复条件:

$ awk '/b/,/d/' file
b
c
d
$ awk '/b/,/d/{if (!/b/) print}' file
c
d
$ awk '/b/,/d/{if (!/d/) print}' file
b
c
$ awk '/b/,/d/{if (!(/b/||/d/)) print}' file
c

此外,这并不明显,但一个阴险的错误爬到上面。请注意,在这个新的输入文件中,现在在“c”和“d”之间的附加“b”:

$ cat file
a
b
c
b
d
e

并再次尝试从输出中排除第一条边界线:

$ awk 'f; /b/{f=1} /d/{f=0}' file
c
b
d
-> SUCCESS
$ awk '/b/,/d/{if (!/b/) print}' file
c
d
-> FAIL

你实际上需要写这样的东西来保持使用范围并排除第一个边界线

$ awk '/b/,/d/{if (c++) print; if (/d/) c=0}' file
c
b
d

但到那时,它显然变得有点傻,你会重写它只是使用像我原来的建议的标志。

7

将 sed 与模式范围一起使用:

sed '/^Idaho$/,/^South Dakota$/!d' filename

或 AWK 具有相同的模式范围:

awk '/^Idaho$/,/^South Dakota$/' filename

在这两种情况下,^$分别匹配行的开头和结尾,因此^Virginia$仅在整行为Virginia时匹配(即West Virginia不匹配)。

或者,如果你喜欢固定字符串匹配超过正则表达式匹配(它在这里没有区别,但可能在其他情况下):

awk '$0 == "Idaho", $0 == "South Dakota"' filename
0
#all bash
__IFS=$IFS
IFS=' '
list=$(cat file.txt)
start="Idaho"
stop="South Dakota"
fst=${list#*$start}
snd=${fst%$stop*}
result="$start$snd$stop"
echo $result
IFS=$__IFS
Seehttp://tldp.org/LDP/abs/html/string-manipulation.html

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(402)
R星服务器在哪:R代码从 ArcGiS服务器拉取功能服务器
上一篇
Linux是什么内核:Linux内核源代码中的“当前”是什么 (current linux kernel version)
下一篇

相关推荐

  • shell脚本编程实例:为Hello World的文件#!/bin/bashecho Hello World > hello.t

    Shell脚本编程是指使用shell(一种命令行解释器)来编写脚本的过程。它可以帮助我们自动化地执行重复性的工作,从而大大提高工作效率。下面是一个简单的shell脚本编程实例,用于查找文件夹中的文件:…

    2023-07-21 10:06:35
    0 94 16
  • docker游戏服务器:如何使用Docker搭建高性能的游戏服务器

    Docker游戏服务器是一种将游戏服务器部署到容器中的方式,它可以帮助游戏开发者快速、轻松地部署游戏服务器,并且可以更轻松地扩展游戏服务器的容量。…

    2023-04-27 09:55:33
    0 60 66
  • win7玩cf卡顿怎么解决:解决Win7环境下CF游戏卡顿问题

    尝试更新系统:可能是由于系统缺少某些补丁或者更新导致CF卡顿,可以尝试在Windows Update中进行检查更新,并安装最新的补丁和更新。更新显卡驱动:可能是由于显卡驱动过旧或者不兼容导致CF卡顿,可以尝试更新显卡驱动,可以到显卡厂商官网下载最新的驱动进行安装。…

    2023-05-27 11:45:17
    0 64 48
  • cv糖醋排骨是弯的吗弯曲的美味

    cv糖醋排骨不是弯的,它是一种制作方法,通常用来制作排骨。代码:…

    2023-04-01 13:03:36
    0 50 99
  • android 视频编码深入理解MediaCodec API

    Android 视频编码是指将原始视频数据经过压缩编码后,生成新的视频数据,以便减少视频文件的体积,提高传输速度,以及更好地在 Android 设备上播放。…

    2023-01-13 10:58:18
    0 29 91
  • javascript数组:排序和搜索

    javascript数组是一种特殊的对象,它可以存储多个值,这些值可以是任何类型的数据。JavaScript数组的元素可以通过索引来访问,数组的索引从0开始,每个元素都有一个索引值。…

    2023-08-28 11:30:24
    0 26 48
  • cookie如何使用:如何使用Cookie来改善用户体验

    Cookie是一种存储在客户端的小型文件,用于记录用户的信息,如访问时间、登录状态等。使用Cookie可以更好地为用户提供服务,比如保存用户的登录状态,记录用户的浏览历史记录等。…

    2023-05-07 02:18:11
    0 45 29
  • cv小敢:如何利用CV小敢提升职业技能?

    cv小敢(Computer Vision Tiny-YOLO)是一种轻量级的物体检测算法,它可以在资源受限的设备上运行,如嵌入式设备、智能手机等。它是基于YOLO(You Only Look Once)算法的一个变体,由Joseph Redmon和Ali Farhadi开发,旨在提高深度学习模型的性能,同时减少模型的大小和计算复杂度。…

    2023-02-09 13:08:59
    0 94 91

发表评论

登录 后才能评论

评论列表(35条)