病娇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
Machusetts
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
Machusetts
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

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

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

相关推荐

  • android 视频编码深入理解MediaCodec API

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

    2023-01-13 10:58:18
    0 88 45
  • cv小敢:如何利用CV小敢提升职业技能?

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

    2023-02-09 13:08:59
    0 69 53
  • coremail论客邮箱Coremail论客邮箱

    Coremail论客邮箱是一款专业的企业邮箱服务,可以满足企业对安全、可靠性和高效性的要求。它拥有强大的安全性能,可以提供多种安全保护,包括防止邮件被窃取、拦截恶意邮件、防止跨站脚本攻击等。此外,它还支持多种企业级功能,如组织架构管理、收发邮件管理、文件共享管理、联系人管理等,可以帮助企业提高工作效率,提升企业形象。…

    2023-02-25 04:36:55
    0 41 42
  • canvas下载安装:Unleash the Power of Canvas to Create Amazing Visuals

    Canvas是一种HTML5技术,可以在网页上创建和绘制2D图形。它是一个JavaScript API,可以使用JavaScript代码来绘制图形,并且可以添加各种效果,如阴影,渐变,动画等。…

    2023-03-08 00:48:14
    0 13 24
  • class定位:The Benefits of Using Class Selectors for Element Locati

    示例示例class定位是一种CSS布局技术,用于指定HTML元素的位置,可以使元素放置在页面的任何位置。代码示例:…

    2023-03-06 07:16:44
    0 35 63
  • cvt加速技巧:如何使用CVT加速技巧提升网络性能?

    cvt加速技巧是一种用于提升计算机程序运行性能的技术。它可以帮助程序员更有效地利用处理器的资源,从而提高程序的性能。cvt加速技巧的主要原理是:在程序运行时,将处理器的资源(如内存、寄存器、流水线等)分解成小块,然后将这些小块重新组合,使其可以更有效地执行程序代码。…

    2023-01-21 04:33:16
    0 75 37
  • linux 流程图软件: 是否有缓存st->op1->op2->cond1cond1(yes)->op3->econd1(no)

    Linux 流程图软件是一种用于在 Linux 系统中创建流程图的软件。它可以帮助用户清楚地表达复杂的流程,并且可以在 Linux 上运行,而无需安装其他软件。…

    2023-01-21 15:13:50
    0 70 47
  • linux的共享文件夹在哪个目录:Linux共享文件夹在/etc/samba目录下

    Linux的共享文件夹在/var/lib/samba/目录下,查看该目录下的文件可以使用以下代码:ls /var/lib/samba/…

    2023-02-10 04:31:59
    0 49 52

发表评论

登录 后才能评论

评论列表(10条)