如果您对如何提取unix中两个单词之间的文本?和如何提取unix中两个单词之间的文本内容感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何提取unix中两个单词之间的文本?的各种细节,并对如何
如果您对如何提取unix中两个单词之间的文本?和如何提取unix中两个单词之间的文本内容感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何提取unix中两个单词之间的文本?的各种细节,并对如何提取unix中两个单词之间的文本内容进行深入的分析,此外还有关于linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行、linux – 使用sed或awk重复提取两个字符串之间的文本?、Linux:在同一行上的特定单词之后提取一个单词、php – 解析2个单词之间的文本的实用技巧。
本文目录一览:- 如何提取unix中两个单词之间的文本?(如何提取unix中两个单词之间的文本内容)
- linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行
- linux – 使用sed或awk重复提取两个字符串之间的文本?
- Linux:在同一行上的特定单词之后提取一个单词
- php – 解析2个单词之间的文本
如何提取unix中两个单词之间的文本?(如何提取unix中两个单词之间的文本内容)
一世
上午
运用
基本
SED
expression: –
sed -n "am/,/sed/p"
得到“am”和“sed”之间的文本,它将输出“am n使用 n basic n sed”。 但我真正的问题是,如果string是:
一世
上午
运用
基本
grep的
expression。
我在这个句子中应用了上面的sed,然后它给出了“ n使用 n basic n grep nexpression式”,它不应该给它。 如果没有匹配,如何丢弃输出?
sed help:匹配和replace文字“ n”(不是换行符)
如何用Windows命令在文本文件中查找string并复制下5个字符
Windows脚本:列出不匹配模式的文件
如何select两种模式之间的线?
如何使用awk在文件中写入一个文件(); 并在之后添加一个printline; 打印find的string?
有什么build议么?
禁用sed中反斜杠的转义函数
查找和replace循环内部
如何在BYTE数组中search模式?
Sed未能取代UTF-8编码
unix:如何判断一个string是否匹配正则expression式
问题中的命令( sed -n "/am/,/sed/p" ,注意添加的斜杠)表示:
找到一个包含字符串am
并打印( p )直到包含sed的行发生
因此它打印:
I am using basic grep expression
因为它包含了am 。 如果要添加更多的行,它们也将被打印,直到包含sed的行出现。
例如:
echo -e 'I am using basic grep expression.nOne more linenOne with sednOne without' | sed -n "/am/,/sed/p"
结果是:
I am using basic grep expression. One more line One with sed
我想 – 你想要做的是这样的:
sed -n "s/.*(am.*sed).*/1/p"
例:
echo 'I am using basic grep expression.' | sed -n "s/.*(am.*sed).*/1/p" echo 'I am using basic sed expression.' | sed -n "s/.*(am.*sed).*/1/p" sed -n "s/.*(am.*sed).*/1/p"
你必须使用稍微不同的sed命令:
sed -n '/am/{:a; /am/x; $!N; /sed/!{$!ba;}; /sed/{s/n/ /gp;}}' file
仅打印包含横跨多行的文本am和sed行。
使用SED时,这可以工作,但它是一个相当压倒性的语法…如果您需要裁剪多行( n)文本的一部分 ,您可能想要尝试一个更简单的方法使用grep :
cat multi_line.txt | grep -oP '(?s)(?<=START phrase).*(?=END phrase)'
例如,我觉得这是抓取perforce变更列表描述 (没有CL信息的其余部分)的最简单的方法:
p4 describe {CL NUMBER} | grep -oP '(?s).*(?=Affected files)'
请注意,您可以使用<=和> =在输出中包含或不包含开始/结束短语。
linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行
sed -n '/FOO/,/BAR/p' test.txt
但是,只有当其中一条线具有匹配的图案时,我如何使sed打印FOO和BAR之间的线条
例如,文件text.txt包含以下行:
Error- Undefined port line1 line2 Undefined port in ALU1 line3 Error- Undefined port line4 line5 Undefined port in LSU line6 Error- Undefined port line7 line8 Undefined port in FGU line9 Error- Undefined port line10 line11 Undefined port in ALU2 line12
我想在两次连续出现之间打印出行
仅当其中一行包含单词“ALU”时,单词“Error”.
所以我只想打印出以下错误消息:
Error- Undefined port line1 line2 Undefined port in ALU1 line3 Error- Undefined port line10 line11 Undefined port in ALU2 line12
解决方法
该脚本使用两个缓冲区:模式缓冲区(它是sed存储当前处理的行的缓冲区,用于模式匹配测试的缓冲区)和保持缓冲区(用于存储前一行的缓冲区).我们的想法是存储上一个/错误/模式匹配的所有行,并在下一个/错误/匹配或流结束时检查/ ALU /出现.
sed -n ' # if /Error/ pattern occured,jump to /ALU/ check /Error/ b alu_check # else append current line to the hold buffer H # if the current line is the last one,jump to /ALU/ check $b alu_check # otherwise jump to end of script (= finish processing of this line) b # alu_check: :alu_check # exchange current pattern buffer with hols buffer context x # print prevIoUs record if /ALU/ occured /ALU/ p '
x命令用保持缓冲区上下文(从上次记住的内容)交换模式缓冲区上下文(当前行) – 注意它将当前行/ Error / pattern存储到保持缓冲区以供下次使用
H将当前行上下文附加到保持缓冲区
linux – 使用sed或awk重复提取两个字符串之间的文本?
我有一个名为’plainlinks’的文件,如下所示:
13080. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94092-2012.gz 13081. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94094-2012.gz 13082. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94096-2012.gz 13083. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94097-2012.gz 13084. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94098-2012.gz 13085. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94644-2012.gz 13086. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94645-2012.gz 13087. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94995-2012.gz 13088. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-94996-2012.gz 13089. ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/999999-96404-2012.gz
我需要生成如下所示的输出:
999999-94092 999999-94094 999999-94096 999999-94097 999999-94098 999999-94644 999999-94645 999999-94995 999999-94996 999999-96404
解决方法
sed -E 's/.*\/(.*)-.*/\1/' plainlinks
输出:
999999-94092 999999-94094 999999-94096 999999-94097 999999-94098 999999-94644 999999-94645 999999-94995 999999-94996 999999-96404
要将更改保存到文件,请使用-i选项:
sed -Ei 's/.*\/(.*)-.*/\1/' plainlinks
或者保存到新文件然后重定向:
sed -E 's/.*\/(.*)-.*/\1/' plainlinks > newfile.txt
说明:
s/ # subsitution .* # match anything \/ # upto the last forward-slash (escaped to not confused a sed) (.*) # anything after the last forward-slash (captured in brackets) - # upto a hypen .* # anything else left on line / # end match; start replace \1 # the value captured in the first (only) set of brackets / # end
Linux:在同一行上的特定单词之后提取一个单词
我是一个新的Linux用户,我是自学的,所以我很抱歉如果这个问题是愚蠢的。 我在网上search,但无法find一个正确的答案..我怎样才能提取一个字在Linux(csh)的特定单词后? 更确切地说,我有一个文件,其中有一行看起来像这样的文件:
[一些无用的数据] –pe_cnt 100 –rd_cnt 1000 [更多数据]
我想提取–pe_cnt字之后的数字100 。 我不能使用''sed'',因为只有当你想要提取整行时才有效。 也许我可以用''awk''?
此外,我有多个文件具有不同的值而不是100,所以我需要的东西,提取的价值,但不依赖于价值。
通过按下特定button来停止脚本(脚本正在处理时听STDIN)
Bashvariables冲突
string的Bash / Substring
用awk或sedreplace和增加字母和数字
如何从一个子函数返回导致返回到父函数?
xmlstarlet XPathexpression式select单个结果而不是多个
在Bash,如何排版一个variables(数字)为5digit?
如何在几秒钟内安排定时重启我的服务器?
MysqL:如何检查退出状态?
有效地超时一个命令,并捕获输出到bash脚本中的variables
用awk :
awk ''{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}'' inputFile
基本上循环每行的单词。 当你找到第一个你正在寻找,抓住下一个字,并打印出来。
用grep :
grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
你可以使用sed。 只需要一组想要匹配的组,并用整个组来替换全行:
sed -n ''s/^.*pe_cnts+([0-9]+).*$/1/p'' file
如果在--pe_cnt和100之间存在单个空格字符,则可以使用前瞻和后向断言
grep -oP ''(?<=--pe_cnts)d+(?=s+--rd_cnt)''
总结
以上是小编为你收集整理的Linux:在同一行上的特定单词之后提取一个单词全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
php – 解析2个单词之间的文本
可以肯定的是,其他人已经问到了这个问题,不过我在这里搜索了SO并且没有找到任何内容
我有一个字符串,想要一个包含2个分隔符(2个单词)之间所有单词的数组.我对正则表达式没有信心所以我最终得到了这个解决方案,但它不合适,因为我需要得到符合这些要求的所有单词,而不仅仅是第一个.
$start_limiter = 'First';
$end_limiter = 'Second';
$haystack = $string;
# Step 1. Find the start limiter's position
$start_pos = strpos($haystack,$start_limiter);
if ($start_pos === FALSE)
{
die("Starting limiter ".$start_limiter." not found in ".$haystack);
}
# Step 2. Find the ending limiters position, relative to the start position
$end_pos = strpos($haystack,$end_limiter,$start_pos);
if ($end_pos === FALSE)
{
die("Ending limiter ".$end_limiter." not found in ".$haystack);
}
# Step 3. Extract the string between the starting position and ending position
# Our starting is the position of the start limiter. To find the string we must take
# the ending position of our end limiter and subtract that from the start limiter
$needle = substr($haystack, $start_pos+1, ($end_pos-1)-$start_pos);
echo "Found $needle";
我还想过使用explode(),但我认为正则表达式可以更好更快.
解决方法:
我对PHP并不熟悉,但在我看来,你可以使用类似的东西:
if (preg_match("/(?<=First).*?(?=Second)/s", $haystack, $result))
print_r($result[0]);
(?< = First)看起来为First但不消耗它, .*?捕获第一和第二之间的所有内容, (?=秒)向前看第二但不消耗它, 最后的s是制作圆点.如果有的话匹配换行符. 要获取这些分隔符之间的所有文本,可以使用preg_match_all,并且可以使用循环来获取每个元素:
if (preg_match_all("/(?<=First)(.*?)(?=Second)/s", $haystack, $result))
for ($i = 1; count($result) > $i; $i++) {
print_r($result[$i]);
}
关于如何提取unix中两个单词之间的文本?和如何提取unix中两个单词之间的文本内容的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行、linux – 使用sed或awk重复提取两个字符串之间的文本?、Linux:在同一行上的特定单词之后提取一个单词、php – 解析2个单词之间的文本等相关知识的信息别忘了在本站进行查找喔。
本文标签: