Unix脚本从变量中删除最后七个字符

时间:2016-03-10 13:36:44

标签: unix sh

需要从变量中删除最后七个字符。

例如,如果我的变量字符串是

COLUMN_NAME||','||

然后输出COLUMN_NAME

我已尝试过以下但最后一个管道符号仅被移除

var=$(lastline%|)
var=$(lastline%|*)

结果:COLUMN_NAME||','|

4 个答案:

答案 0 :(得分:2)

老派的方式

echo "COLUMN_NAME||','||" | rev|cut -c 8-|rev

所以你只是反转字符串,删除第一个7字符并再次反转字符串。

使用带有echo的$variable也可以这样做。

你也可以使用下面的awk,这会更快。

awk '{print substr($0, 1, length($0)-7)}'

示例:

$ export variable1="COLUMN_NAME||','||"
$ echo $variable1|rev|cut -c 8-|rev
COLUMN_NAME
$ echo $variable1|awk '{print substr($0, 1, length($0)-7)}'
COLUMN_NAME

答案 1 :(得分:2)

删除最后7个字符:

$ echo "${var%%|*}"
COLUMN_NAME

删除第一个管道后的所有内容:

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    internal class Program
    {
        private const string FilePath = @"C:\objLifeCycle.txt";

        private static void Main(string[] args)
        {
            var result = GetList();
            Console.WriteLine("Results received! Object Id: [{0}] time: [{1}]", result.ObjId, DateTime.Now);

            //result = null;

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Thread.Sleep(2000);
                    Console.WriteLine("...");
                    GC.Collect();
                }
            });

            Console.ReadKey();
        }

        private static LinkList GetList()
        {
            return new LinkList(FilePath) { "link1", "link2", "link3" };
        }
    }
}

internal class LinkList : List<string>
{
    internal string ObjId { get; set; }

    internal string FilePath { get; set; }

    internal LinkList(string filePath)
    {
        ObjId = Guid.NewGuid().ToString();
        FilePath = filePath;

        WriteFile($"Object LinkList with Id [{ObjId}] has been created at [{DateTime.Now}]");
    }

    ~LinkList()
    {
        WriteFile($"Object LinkList with Id [{ObjId}] has been destroyed at [{DateTime.Now}]");

        Environment.Exit(0);
    }

    private void WriteFile(string line)
    {
        var sw = new StreamWriter(FilePath, true);
        sw.WriteLine(line);
        sw.Close();
    }
}

https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching

答案 2 :(得分:1)

您需要使用两个%来删除最长的匹配项:

$ r="COLUMN_NAME||','||"
$ echo ${r%%|*}
COLUMN_NAME

正如BashFAQ在Removing part of a string中所说:

  

%表示“从结尾删除最短的匹配   变量的内容“。

     

%%表示“从结尾删除最长的匹配   变量的内容“。

答案 3 :(得分:0)

您可以从该点找到字符串的长度和索引:

str1="1234567890foobar";
strlen=${#str1};

str2=${str1:0:$strlen-7};
echo $str2;