我在Unix中有一个变量,它存储多行字母数字字符。我想grep到一个特定的单词并获得它后面的所有文本。
例如,$Variable
包含:
Hello, User
Your files are:
File1 : Exists
File2 : None
让我们说我想找到File2,这是最后一行,如果它是Yes或None,或冒号后出现的任何文本并将其保存到另一个变量,我想要。
答案 0 :(得分:2)
改用sed
sed -n '/the word you are looking for/,$p' <file name>
或者因为你说它是一个变量更像是:
echo "$variable" | sed -n '/the word you are looking for/,$p'
sed -n说不要打印。
这个模式来自&#34;你要找的那个词&#34;到$这是文件的结尾做p命令是print:)
如果你必须在文件结束前停止,那么你必须用结束模式替换$
如果您只想将结果保存到另一个变量:
new_variable=$(echo "$variable" | sed -n '/the word you are looking for/,$p')
另请注意,您要查找的字符串中包含/,然后您必须使用\来转义它,所以它看起来像
new_variable=$(echo "$variable" | sed -n '/the word you are\/ looking for/,$p')
答案 1 :(得分:1)
所以你有一个变量定义为:
$ var="abc\ndef\nghi\njkl\nmn"
然后,如果你想打印&#34; line&#34;含有&#34; ghi&#34;并按照这种方式:
$ echo -e $var | sed -n '/ghi/,$p'
答案 2 :(得分:1)
grep
是 G 以小心方式搜索 R egular E xpression和 P rint匹配的字符串。这不是你想要做的,你想要一个 S 输入和 ED 它输出它的一部分。猜猜UNIX中有什么工具。
$ echo "$var"
Hello, User
Your files are:
File1 : Exists
File2 : None
$ var2=$(echo "$var" | sed -n 's/^File2 : //p')
$ echo "$var2"
None
答案 3 :(得分:0)
假设:
function notEquals(n) {
return function (el) {
return el !== n;
}
}
function removeZeros(arr) {
return arr.filter(notEquals(0));
}
removeZeros(acceptedTermsPoints()); // [3, 3]
您可以使用以下内容将variable="Hello, User
Your files are:
File1 : Exists
File2 : None"
的信息转换为另一个变量File2
file2
双引号保留变量中的换行符。 file2=$(echo "$variable" | sed -n '/File2/ s/File2 *: *//p')
会禁止默认打印。该模式匹配包含-n
的行,后跟任意数量的空格,冒号和任意数量的其他空格;它被替换为空,行的其余部分由File2
打印,并在变量sed
中捕获。如果数据中file2
前面有空格,您可以安排匹配并删除它们。