在模式sed之前替换

时间:2016-03-03 18:07:55

标签: replace sed

我需要类似的内容:sed: Replace part of a line

我有一个IPaddres作为模式,我需要在它之前替换字符串。

示例:

#stuff SSIPaddress

需要

stuff SIPaddress

想法或者至少如何将链接中的一个转向我的工作:)

2 个答案:

答案 0 :(得分:0)

根据您的示例:

sed 's/^#stuff SS\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)\(.*\)/stuff S\1\3/' <<< "#stuff SS1.2.3.4"

输出:

stuff S1.2.3.4

答案 1 :(得分:0)

CodeGnome,你是对的,但让我展示我的尝试:

sed: Replace part of a line - 这取代了一种模式。

我试图将字符串反转为我工作(替换模式后,右)

#*.* SSdrama:123
#*.* SSIP

这个想法的问题是,它在文件&amp;&amp ;;中打印出匹配行的副本。不能在最后没有文件的双管sed -i(错误:没有输入文件)

获胜的代码,在经历了很多疯狂之后

#include <iostream>
#include <armadillo>
#include <tuple>
#include <algorithm>
#include <vector>

typedef std::tuple<std::size_t,std::size_t,std::size_t> D3tuple;

void printSize(const arma::cube &cube);
void simplePermute(arma::cube &cube, const D3tuple &order);
arma::uword getSize(const arma::cube &cube,
                    const std::size_t &n);
D3tuple get_coeff(arma::cube &cube, const D3tuple &order);

int main(int argc, char** argv)
  {

  arma::cube mycube = arma::randu<arma::cube>(2,2,2);
  std::cout<<mycube<<std::endl;
  printSize(mycube);

  simplePermute(mycube,D3tuple(3,1,2));
  printSize(mycube);
  std::cout<<mycube<<std::endl;
  return 0;
  }

void printSize(const arma::cube &cube)
    {
    std::cout<<cube.n_rows<<" "<<cube.n_cols<<" "<<cube.n_slices<<std::endl;
    }

void simplePermute(arma::cube &cube, const D3tuple &order)
    {
    auto first = std::get<0>(order),
        second = std::get<1>(order),
        third = std::get<2>(order);
    std::size_t cols = getSize(cube,first),
        rows = getSize(cube,second) ,
        slices = getSize(cube,third);

    arma::cube temp(cols,rows,slices);
    std::size_t c1,c2,c3;
    std::tie(c3,c2,c1) = get_coeff(cube,order);
    std::size_t index = 0;
    for(std::size_t i = 0;i<cols;i++)
        for(std::size_t j = 0;j<rows;j++)
            for(std::size_t k = 0;k<slices;k++)
                temp[index++] = cube[c1*i+c2*j+c3*k];

    cube = temp;
    }

arma::uword getSize(const arma::cube &cube,
                    const std::size_t &n)
    {
    switch (n)
        {
        case 1 : return cube.n_rows;
        case 2 : return cube.n_cols;
        case 3 : return cube.n_slices;
        }
    return 0;
    }

D3tuple get_coeff(arma::cube &cube, const D3tuple &order)
    {
    std::size_t c1,c2,c3;
    switch (std::get<0>(order))
        {
        case 1 : 
            c1 =  1;break;
        case 2 : 
            c1 =  cube.n_rows; break;
        case 3 : 
            c1 =  cube.n_rows*cube.n_cols; break;
        }
    switch (std::get<1>(order))
        {
        case 1 : 
            c2 =  1; break;
        case 2 : 
            c2 =  cube.n_rows; break;
        case 3 : 
            c2 =  cube.n_rows*cube.n_cols; break;
        }
    switch (std::get<2>(order))
        {
        case 1 : 
            c3 =  1; break;
        case 2 : 
            c3 =  cube.n_rows; break;
        case 3 : 
            c3 =  cube.n_rows*cube.n_cols; break;
        }
    return std::make_tuple(c1,c2,c3);
    }

由于

var selectedIndexPath: NSIndexPath = self.collectionView.indexPathForItemAtPoint(pointInCollectionView)

&#34;不要将戏剧与SS模式相匹配,除了所有其他内容(我的样本中只有一次出现)sed用S代替SS而##用&#39;&#39;;注意我没有必要最后匹配IP。