删除一行中两个字符串之间的字符串

时间:2017-10-12 11:57:40

标签: perl awk sed

我正在尝试删除括号<>之间的所有内容,如果一行只有一个<>,我可以这样做,但如果一行有多个,则它似乎删除了外部<中的所有内容。 >

    .login-form {
      width: 250px;
      background-color: #eee;
      padding: 20px;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }

    .logo {
      width: 100%;
      max-height: 
    }

    .img-container {
      margin-bottom: 20px;
      text-align:center;
    }

    .form-container {
      text-align: center;
    }

    .button {
      width: 80px;
    }

    input {
      width: 200px;
      margin-bottom: 10px;
    }
/* You can Change the width of small device screen you expected */
@media screen and (max-width: 480px){
    .logo {
      width: auto;
      max-height: 30vh;
      min-width: 15vw;
    }
}

第一个回声工作正常,但如果一个名词有多个<>,则无法分类。

    <div class="login-form">
      <div class="img-container">
        <img src="https://pmcdeadline2.files.wordpress.com/2016/07/logo-tv-logo.png" alt="logo" class="logo">
      </div>

      <form class="form-container">
        <input type="text" placeholder="Username">
        <input type="password" placeholder="Password">
        
        <button>Login</button>
      </form>
    </div>

感谢

3 个答案:

答案 0 :(得分:2)

使用awk

# using gsub - recommended 
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk 'gsub(/<[^>]*>/,"")' 
1  2  3  4  ...... 1000 

# OR using FS and OFS
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk -F'<[^>]*>' -v OFS='' '$1=$1'
1  2  3  4  ...... 1000 

答案 1 :(得分:1)

关注awk会对你有所帮助。

echo "hi, <how> are <you>? "  | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'

OR

echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>"  | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'

说明: 只需遍历该行的所有字段(通过启动从i=1开始直到值{{1}的for循环}}(字段数)),我在检查一个字段的值是否满足正则表达式NF(意味着它有)然后我将它取消。

答案 2 :(得分:1)

*与贪婪匹配零次或多次。使用否定字符类<[^>]*>

echo "hi, <how> are <you>? " | sed 's/<[^>]*>//g'