如何删除分隔符之前的文本?

如何删除分隔符之前的文本?

我需要帮助删除文本文件所有行中分隔符);前后的文本。 |IE:

 SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|

结果应该是这样的

SUBSCIBER_MSISDN=6289666195060|

知道如何删除该部分吗?这是一个大文件。

如果我必须使用的话我会发疯的sed

答案1

假设您显示的是某个输入文件中的完整行:

sed "s/'.*/|/" file >newfile

'这会将每行第一个字符之后的所有内容替换为一个|字符。结果将通过重定向写入新文件。我在sed表达式周围使用双引号,因为单引号字符串不能包含单引号字符。

给定示例数据,这会产生

 SUBSCIBER_MSISDN=6289666195060|

如果您还想从行首删除空格(您的示例似乎是这样做的):

sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile

或者,

sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile

如果您厌恶sed,您可以使用awk进行完全相同的转换:

awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

时髦的外观'"'"'是引用的单引号。它必须在构成awk代码的单引号字符串之外加双引号。我们还可以使用'\'',即

awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

或者,您可以使用八进制 ASCII 代码作为单引号字符:

awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

相关内容