![如何在 Linux 中删除分隔符之前的文本](https://linux22.com/image/41521/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%AD%E5%88%A0%E9%99%A4%E5%88%86%E9%9A%94%E7%AC%A6%E4%B9%8B%E5%89%8D%E7%9A%84%E6%96%87%E6%9C%AC.png)
我需要删除分隔符之前的行中的文本。
例如:
(123434): hello::{apple,orange,mango}.
我需要先删除之前的文本:
。 IE (123434)
。
linux中有没有命令可以完成这个任务?
答案1
这个sed
命令应该可以解决问题。以下命令将覆盖该文件:
sed -i 's/^[^:]*:/:/' file
要仅打印输出,请删除该-i
标志。要将输出放入新文件中,请删除该-i
标志并重定向输出:
sed 's/^[^:]*:/:/' file > new_file
答案2
您可以使用cut
:
echo '(123434): hello::{apple,orange,mango}.' | cut -d: -f2-
答案3
你可以用一个非常简单的方法来做到这一点重击操作说明:
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
这将打印: hello::{apple,orange,mango}.
.您可以以类似的方式剪切前缀和后缀。此外,前缀和后缀定义可以包含通配符。
剪切前缀 - 直到第一个前缀通配符匹配:${variable#prefix}
剪切前缀 - 直到最后一个前缀通配符匹配:${variable##prefix}
剪切后缀 - 直到第一个后缀通配符匹配:${variable%suffix}
剪切后缀 - 直到最后一个后缀通配符匹配:${variable%%suffix}
乍一看可能不太清楚,请看下面的例子:
mytext="xAxBxAxBx"
echo ${mytext#*A} # will print: xBxAxBx
echo ${mytext##*A} # will print: xBx
echo ${mytext%B*} # will print: xAxBxAx
echo ${mytext%%B*} # will print: xAx
echo ${mytext%%C*} # will print: xAxBxAxBx
在最后一个示例中,模式不匹配,因此没有剪切任何内容。