我在Unix中有一个变量,它存储多行字母数字字符。 我想grep到一个特定的单词,并获得其后的所有文本。
例如,$Variable包含:
Hello, User
Your files are:
File1 : Exists
File2 : None
让我们说我想找到File2,这是最后一行,我想确定它是Yes还是None或冒号后面是否存在任何文本并将其保存到另一个变量。
您可以在问题中举一个例子吗?
@JonathanLeffler同一行-例如:到现在为止,如上例所示
请在示例中添加示例输入和该示例输入的所需输出。
因此,您想查看从单词开始到行尾的包含单词的每一行吗? 如果单词是fox并且行是the fox and eagle out-foxed the badger,那么找到两个序列fox中的哪个并不重要吗? 也许令人惊讶的是,要打印第一个(至少在Im所考虑的机制中)更难。 另外,out-foxed是否算作包含单词fox,还是您要查找没有前后字母字符的fox?
@JonathanLeffler不,我在一行中没有重复的单词。 只想找到以该单词开头的行并将其再次保存到变量中
改用sed
sed -n '/the word you are looking for/,$p'
或者因为您说的是变量中的内容,例如:
echo"$variable" | sed -n '/the word you are looking for/,$p'
sed -n表示不打印。
模式显示从"您要查找的单词"到$,即文件的结尾,执行print的p命令:)
如果必须在文件末尾之前停止,则必须将$替换为结束模式
如果只想将结果保存到另一个变量中:
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')
我可以不打印就将其保存到另一个变量吗?
是的更新帖子
grep用于全局搜索正则表达式并打印匹配的字符串。那不是您想要做的,您想要一个输入流并对其进行EDit输出的一部分。猜猜在UNIX中哪种工具可以做到这一点。
$ echo"$var"
Hello, User
Your files are:
File1 : Exists
File2 : None
$ var2=$(echo"$var" | sed -n 's/^File2 : //p')
$ echo"$var2"
None
因此,您将变量定义为:
$ var="abc
def
ghi
jkl
mn"
然后,如果要打印包含" ghi"的"行"并按照以下方式进行:
$ echo -e $var | sed -n '/ghi/,$p'
鉴于:
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中。如果数据中File2前面有空格,您也可以安排匹配并删除它们。