grep在开头排除一个符号

时间:2017-10-20 15:02:28

标签: regex unix grep

我有一个xml文件,它有'<'在前面没有转义字符的行之间.. 所以我首先尝试使用以下方法解析xml:

xmllint --noout filename.xml

但这不起作用..因为我的xml版本是1.1,不支持.. 所以作为替代,我开始搜索'<'不包括句子的开头或结尾..

应该相当容易..我试过:

grep -v '^[<]'

但这不起作用..有人可以帮忙吗?

例如: 文件名有:

 <instrument F001="6-A-1046" INSTRUMENT_ID="<xyz>" >
  <field fieldname="CUR007" value="<EUR>"/>
  <field fieldname="C207" value="2023-01-11"/>
  <field fieldname="INS160" value="0"/>
  <field fieldname="PRD013" value="1020"/>
  <field fieldname="PRD150" value="0"/>
  <field fieldname="PRD205" value="0"/>
 </instrument>

我希望输出

 <instrument F001="6-A-1046" INSTRUMENT_ID="<xyz>" >
  <field fieldname="CUR007" value="<EUR>"/>

2 个答案:

答案 0 :(得分:1)

搜索除了应该是尖括号的第一个/最后一个非空白字符以外的grep '^\s*<.*[<>].*>\s*' grep '^\s*<.*[<>].*>\s*' << EOF > <instrument F001="6-A-1046" INSTRUMENT_ID="<xyz>" > > <field fieldname="CUR007" value="<EUR>"/> > <field fieldname="C207" value="2023-01-11"/> > <field fieldname="INS160" value="0"/> > <field fieldname="PRD013" value="1020"/> > <field fieldname="PRD150" value="0"/> > <field fieldname="PRD205" value="0"/> > </instrument> > EOF

<instrument F001="6-A-1046" INSTRUMENT_ID="<xyz>" >
 <field fieldname="CUR007" value="<EUR>"/>

请注意,这与整行匹配,因此如果您想要对该行执行某些操作(而不仅仅是其中的一部分),则可以使用它。

测试:

<section>
    <v-parallax :src="about.whiskey">
        <v-layout column align-left justify-center>
            <h1 class="beige">{‌{ about.mission.header }}</h1>
            <h6 class="beige">{‌{ about.mission.subheader }}</h6>
        </v-layout>
    </v-parallax>
</section>
export default {
    data() {
        return {
            about: {
                whiskey: '../../assets/images/bf-whiskey-glass.jpg',
                whiskeys: '../../assets/images/three-whiskeys.jpg',
                metrics: '../../assets/images/metrics.jpg',
<section>
    <v-parallax :src="about.whiskeys">
        <v-layout column align-right justify-center>
            <h1 class="beige text-sm-right">{‌{ about.solution.title }}</h1>
        </v-layout>
    </v-parallax>
</section>
<section>
    <v-parallax :src="about.metrics">
        <v-layout column align-left justify-center>
            <h1 class="beige">{‌{ about.press.title }}</h1>
        </v-layout>
    </v-parallax>
</section>



===========================================================================

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'build.js'
  },
  resolve: {
    extensions: ['.js', '.vue'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      'public': path.resolve(__dirname, './public')
    }
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
          }
          // other vue-loader options go here
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modul
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
          // use: [
          //     {
          //         loader: 'url-loader',
          //         options: {
          //             limit: 8192
          //         }
          //     }
          // ]
        loader: 'file-loader',
        options: {
          objectAssign: 'Object.assign'
        }
      },
      {
        test: /\.styl$/,
        loader: ['style-loader', 'css-loader', 'stylus-loader']
      }
    ]
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true
  },
  performance: {
    hints: false
  },
  devtool: '#eval-source-map'
}

if (process.env.NODE_ENV === 'production') {
  module.exports.devtool = '#source-map'
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}

输出:

{{1}}

答案 1 :(得分:1)

我创建了一个不同的示例来添加更多案例

$ cat ip.txt
foo bar < xyz
<123 abc <42> >
  <good>
bad > line

$ # get lines having < not at start of line
$ grep '[^[:blank:]].*<' ip.txt
foo bar < xyz
<123 abc <42> >

$ # get lines having > not at end of line
$ grep '>.*[^[:blank:]]' ip.txt
<123 abc <42> >
bad > line

$ # combining the two
$ grep -E '[^[:blank:]].*<|>.*[^[:blank:]]' ip.txt
foo bar < xyz
<123 abc <42> >
bad > line
  • [:blank:]代表空格和制表符
  • 因此[^[:blank:]]将匹配非空白字符