用特殊字符替换制表符和数字

时间:2019-12-19 16:14:12

标签: regex bash sed

在我的大文件中,

HomeContainer = () => {
    return (
      <div>
        <Navigation />
        <Route path="/" component={Home} />
        <Route path="/login" render={props => <LogIn {...props} />}/>
        <Route path="/register" component={Register} />;
        <Footer />
      </div>
    );
  };

  DefaultContainer = () => {
    return (
      <div className="app_container">
        <SideNav />
        <Route path="/dashboard" component={Dashboard} />
        <Route path="/dashboard/recent" component={Recent} />
        <Route path="/dashboard/AddNote" component={AddNote} />
        <Route path="/dashboard/ToDo" component={ToDo} />
      </div>
    );
  };

  render() {
    return (
      <div>
        <BrowserRouter>
          <Switch>
            <Route path="/" component={this.HomeContainer} />
            <AuthRoute path="/dashboard" authed={this.props.auth} component={this.DefaultContainer} />
          </Switch>
        </BrowserRouter>
      </div>
    );
  }
}

如何分别用/ 1和/ 2替换\ tab 77和\ tab 141?我喜欢bash脚本,因为我有许多这样的文件。 请解释一下答案,以防万一,因为正则表达式的结果太令人困惑了...

HISEQ1:122:D0P60ACXX:3:1101:8389:1991   77
HISEQ1:122:D0P60ACXX:5:1102:11591:168589    141

2 个答案:

答案 0 :(得分:1)

请您尝试以下。

sed -E -i 's/ +77/\/1/;s/ +141/\/2/'  Input_file

答案 1 :(得分:1)

我个人会使用perl而不是sed

perl -i -pe 's/\s+77/\/1/g' file.txt
perl -i -pe 's/\s+141/\/2/g' file.txt

这两个命令将遍历file.txt并在两者中执行就地替换-首先,寻找空格,后跟“ 77”,并替换为“ / 1”,然后寻找空格,后跟“ 141”并替换为“ / 2”。

如果要一行完成,可以使用以下命令:

perl -1 -pe '$one="\/1"; $two="\/2"; s/(\s+77)|\s+141/$1 ? $one : $two/eg' file.txt

由于要打印都使用转义符的“ / 1”和“ / 2”,因此需要在评估它们之前将字符串文字存储在变量中,否则会出现语法错误。