我想使用grep
来过滤bash变量中定义的一些行。
- 如果变量定义在“
$(cat)
”内,则结果正确:**
- 如果变量定义在“
test_string=$(cat <<END
hello
world
test
bar hello
END
)
echo -e "$test_string"
filter_string="$(grep "hello" <<< "$test_string")"
echo -e "$filter_string"
- 正确输出如下:**
# test_string=$(cat <<END
hello
world
test
bar hello
END
)
# echo -e "$test_string"
hello
world
test
bar hello
# filter_string="$(grep "hello" <<< "$test_string")"
# echo -e "$filter_string"
hello
bar hello
#
- 但如果定义了变量"
\n
"(使用脚本将许多其他字符串连接到一个多行变量中),grep将无法正常工作:**
- 但如果定义了变量"
test_string="hello\nworld\ntest\nbar hello"
echo -e "$test_string"
filter_string="$(grep "hello" <<< "$test_string")"
echo -e "$filter_string"
- 这里是错误的输出:**
# test_string="hello\nworld\ntest\nbar hello"
# echo -e "$test_string"
hello
world
test
bar hello
# filter_string="$(grep "hello" <<< "$test_string")"
# echo -e "$filter_string"
hello
world
test
bar hello
#
如何使grep
find命令与变量中的“\n
”一起工作?
- 更新:**
- 创建多行变量的代码如下:**
test_string="hello"
test_string="${test_string}\nworld"
test_string="${test_string}\ntest"
test_string="${test_string}\nbar hello"
test_string
的内容是动态的,通过加入其他来源的其他单词。**
- 更新2:用\n连接两个字符串变量:**
other_string="world"
test_string="hello"
test_string+=$'\n${other_string}'
test_string+=$'\ntest'
test_string+=$'\nbar hello'
echo "$test_string"
- 输出如下:**
hello
${other_string}
test
bar hello
2条答案
按热度按时间yqkkidmi1#
当你声明一个变量为
test_string="hello\nworld\ntest\nbar hello"
时,它在声明变量中存储的是文字\n
,而不是换行符。使用
printf
声明一个嵌入了\n
的变量,如下所示:或者在
bash
中使用$'...'
指令:然后使用
grep
:输出:
更新答案:
输出:
rks48beu2#
试试这样: