在同一服务器上,Sed在vi中的行为不同于命令行

时间:2018-07-17 18:36:28

标签: string sed replace redhat

我正在寻找文件系统名称(或第一列中的/),如果有斜杠或那个文件系统(与哪一个无关),我想通过不带cr的替换来加入两行。

在vi中工作正常。

 :%s:\n\/fs_name:\/fs_name:g

使用:作为清晰性的分隔符

每次运行作业时,我都需要能够在脚本中复制此内容。因此,每次在vi中进行操作都不是解决方案

换句话说,我想要: 第一行

/fs second line 

成为

first line /fs second line

在redhat 7上使用bash 4.2.46。sed 4.2.46(s)和vim 7.4

1 个答案:

答案 0 :(得分:2)

跨换行符的

sed 有点不平凡。希望我能正确理解您的意图(见下文),在这种情况下,您正在寻找类似的东西:

sed -e 'N;s#\n/#/#' input.txt

始终将行添加到模式空间。然后只需将<newline>后跟/的所有/实例替换为-i。您可以通过使用 sed part1 /something else 参数来实现此目的。


在浏览当前格式的问题时,我遇到了一些困难,但是我的理解是,您正在追寻这个问题。对于每个:

part1/something else

您想要获得:

s

正如William Pursell在对您的问题的评论中指出的那样。在 vi 中使用echo -e '%s#t#X#g\nwq' | ex input.txt与调用 sed 是不同的,即使它们在历史上相关并且可以追溯到 ed vi 的命令模式类似于使用 ex 编辑文件。哪个顺便说一句。您可以在脚本中执行某些操作,因为您可以通过命令行将其输入命令。例如。 :%s#t#X#g与在 vi 中打开:wq之后执行input.txtoverride var inputAccessoryView: UIView? { get { containerView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50) containerView.backgroundColor = UIColor.white containerView.isMultipleTouchEnabled = true containerView.isUserInteractionEnabled = true let chooseImage = UIImageView() chooseImage.image = UIImage(named: "upload_image_icon") chooseImage.translatesAutoresizingMaskIntoConstraints = false containerView.addSubview(chooseImage) let gesture = UITapGestureRecognizer(target: nil, action: #selector(handleChatImage)) chooseImage.isMultipleTouchEnabled = true chooseImage.isUserInteractionEnabled = true chooseImage.addGestureRecognizer(gesture) chooseImage.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true chooseImage.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true chooseImage.widthAnchor.constraint(equalToConstant: 44).isActive = true chooseImage.heightAnchor.constraint(equalToConstant: 44).isActive = true send.setTitle("Send", for: .normal) send.translatesAutoresizingMaskIntoConstraints = false containerView.addSubview(send) send.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true send.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true send.widthAnchor.constraint(equalToConstant: 80).isActive = true send.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true containerView.addSubview(self.inputTextField) self.inputTextField.leftAnchor.constraint(equalTo: chooseImage.rightAnchor, constant: 8).isActive = true self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true self.inputTextField.rightAnchor.constraint(equalTo: send.leftAnchor).isActive = true self.inputTextField.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true divide.backgroundColor = UIColor.lightGray divide.translatesAutoresizingMaskIntoConstraints = false containerView.addSubview(divide) divide.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true divide.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true divide.widthAnchor.constraint(equalTo: containerView.widthAnchor).isActive = true divide.heightAnchor.constraint(equalToConstant: 1).isActive = true send.addTarget(self, action: #selector(sendMessage), for: .touchUpInside) return containerView } } 相同。