从特定字段中删除特殊字符

时间:2020-03-18 11:08:30

标签: bash shell unix awk sed

我在Unix上具有以下CSV文件,并且我只想从最后一个字段(由|分隔)中删除所有特殊字符和空格,请您帮忙?

当前输入:

16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENT C.UTIL

预期输出:

16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENTCUTIL

3 个答案:

答案 0 :(得分:2)

假设您要删除非字母数字字符,可以使用以下awk命令:

awk 'BEGIN { FS=OFS="|" } { gsub("[^a-zA-Z0-9]+", "", $NF); print $0 }' inputFile
  • BEGIN { FS=OFS="|" }将字段定界符设置为|用于输出和输入。
  • gsub("[^a-zA-Z0-9]+", "", $NF)用空字符串替换最后一个字段中的所有非字母数字字符序列
  • print $0输出更新后的行

您可以try it here

请注意,这取决于字段值中缺少|字符,而CSV允许使用转义的分隔符或在引用的字段值中使用。如果您在这种情况下,最好使用预先存在的CSV解析器。

答案 1 :(得分:2)

假设您要从可以使用的每一行的最后一个字段中删除所有不是大写或小写字母或数字([A-Za-z0-9])的字符

awk -F '|' -v 'OFS=|' '{ gsub(/[^A-Za-z0-9]/,"",$NF); print}' inputfile > outputfile

从问题中的输入行中准确地创建所需的输出行。

答案 2 :(得分:0)

这可能对您有用(GNU sed):

customButtons: {
  promptResource: {
    text: "+ room",
    click: function() {
      var title = prompt("Room name");
      if (title) {
        calendar.addResource({
          title: title
        });
        fetch("add_resources.php", {
          method: "POST",
          headers: {
            Accept: "application/json"
          },
          body: encodeFormData({ "title": title})
        })
          .then(response => console.log(response))
          .catch(error => console.log(error));
      }
    }
  }
},

此操作会在每一行中向后移动,以除去sed -E ':a;s/[^[:alnum:]|]([[:alnum:]]*)$/\1/;ta' file a-zA-Z0-9以外的任何字符,直到到达字段定界符_,即仅操作在每行的最后一个字段上。

如果最后一个字段只能包含大写字母字符,请使用:

|