Bash 在具有特定字符串的行前面添加字符

Bash 在具有特定字符串的行前面添加字符,bash,Bash,例如 我有一个三行的文件测试,比如 Tell:you are the one Great! that helped me you:me are the one to go 在这个文件中,我喜欢搜索字符串“you:me”,在找到它之后,它必须在前面加上# 是这样的吗 Tell:you are the one Great! that helped me #you:me are the one to go 提前感谢您只需使用正则表达式即可: sed 's/^you:me/#you:me/' the

例如

我有一个三行的文件测试,比如

Tell:you are the one
Great! that helped me
you:me are the one to go
在这个文件中,我喜欢搜索字符串“you:me”,在找到它之后,它必须在前面加上#

是这样的吗

Tell:you are the one
Great! that helped me
#you:me are the one to go

提前感谢

您只需使用正则表达式即可:

sed 's/^you:me/#you:me/' thefile.txt
我在这里假设
you:me
始终位于行的开头,否则如果要匹配所有
you:me
s:

sed 's/you:me/#you:me/g' thefile.txt

只需使用正则表达式即可:

sed 's/^you:me/#you:me/' thefile.txt
我在这里假设
you:me
始终位于行的开头,否则如果要匹配所有
you:me
s:

sed 's/you:me/#you:me/g' thefile.txt
使用sed

sed 's/you:me/#&/' file
使用sed

sed 's/you:me/#&/' file

正如其他答案所建议的,我将使用sed。但是,如果您正在寻找纯bash解决方案,请使用以下方法:

while read line; do
    if [[ "$line" == "you:me"* ]]; then
        echo "#$line"
    else
        echo "$line"
    fi
done
正如chepner所建议的,您可以使用bash替换替换if结构:

while read line; do
    echo "${line/#you:me/#you:me}
done

正如注释中所解释的:第一个散列是一个标志,指示匹配应该在
$line
的开头,第二个是我们要放在该行前面的文本散列。

正如其他答案所建议的,我将使用sed。但是,如果您正在寻找纯bash解决方案,请使用以下方法:

while read line; do
    if [[ "$line" == "you:me"* ]]; then
        echo "#$line"
    else
        echo "$line"
    fi
done
正如chepner所建议的,您可以使用bash替换替换if结构:

while read line; do
    echo "${line/#you:me/#you:me}
done
正如注释中所解释的:第一个散列是一个标志,指示匹配应该在
$line
的开头,第二个是我们要放在该行前面的文本散列。

我会:

sed '/you:me/s/^/#/'
这将找到一行包含
you:me
,无论是在开头还是中间,都要在行首添加一个
#

所以

我会:

sed '/you:me/s/^/#/'
这将找到一行包含
you:me
,无论是在开头还是中间,都要在行首添加一个
#

所以


以下是一个awk替代方案,因为:

awk '/you:me/ { print "#"$0 }'

以下是一个awk替代方案,因为:

awk '/you:me/ { print "#"$0 }'

我只能看到一行。我将编辑一行可能的三行,但我现在不知道你的意思是什么。我只能看到一行。我将编辑一个可能的三行,但我现在不知道您的意思。您可以将
if
语句减少为冗余的
echo“${line/#you:me/#you:me}”
。第一个
#
将匹配锚定到字符串的开头;第二个
#
是替换测试中的一个文本字符。当然,我为什么没有想到bash替换呢。谢谢,我会补充的。你也可以把
if
语句简化为冗余的
echo“${line/#You:me/#You:me}”
。第一个
#
将匹配锚定到字符串的开头;第二个
#
是替换测试中的一个文本字符。当然,我为什么没有想到bash替换呢。我再补充一句,谢谢。谢谢你的回复。。但我试图将其附加到同一个文件中,但我无法执行此操作。。这是我得到的[10:23:00 host]>sed的/^you:me/#you:me/#append\u文件告诉我:你是最棒的!这对我很有帮助35;你:我是要去的人[10:23:23主持人]>sed的/^you:me/#你:我/“append_file”[10:23:42主持人]>cat append_file告诉我:你是一个伟大的人!这对我很有帮助你:我是你要去的人[10:23:48 host]>sed's/^you:me/#you:me/'append_file>append_file[10:24:00 host]>cat append_file[10:24:02 host]>ls-ltr append_file-rwxr-xr-x1 aselvan enger 0 Jan 28 10:24 append_file[10:24:08 host]>尝试使用sed-i“但没有运气”我的操作系统版本是sunOS 5.10抱歉,但是我不明白你贴的是什么…你能在你的问题中格式化它吗?我正在尝试将它附加到同一个文件中,不幸的是我不能这样做。它是这样的“[10:23:48 host]>sed的/^you:me/#you:me/'append_file>append_file”。尝试使用“sed-i”也没有帮助谢谢你的回复。。但我试图将其附加到同一个文件中,但我无法执行此操作。。这是我得到的[10:23:00 host]>sed的/^you:me/#you:me/#append\u文件告诉我:你是最棒的!这对我很有帮助35;你:我是要去的人[10:23:23主持人]>sed的/^you:me/#你:我/“append_file”[10:23:42主持人]>cat append_file告诉我:你是一个伟大的人!这对我很有帮助你:我是你要去的人[10:23:48 host]>sed's/^you:me/#you:me/'append_file>append_file[10:24:00 host]>cat append_file[10:24:02 host]>ls-ltr append_file-rwxr-xr-x1 aselvan enger 0 Jan 28 10:24 append_file[10:24:08 host]>尝试使用sed-i“但没有运气”我的操作系统版本是sunOS 5.10抱歉,但是我不明白你贴的是什么…你能在你的问题中格式化它吗?我正在尝试将它附加到同一个文件中,不幸的是我不能这样做。它是这样的“[10:23:48 host]>sed的/^you:me/#you:me/'append_file>append_file”。尝试使用“sed-i”也没有帮助