How to remove space or newline characters from a string?

本文介绍了如何使用Bash脚本中的sed和tr命令来去除字符串中的空格和换行符。通过实例展示了直接处理字符串及从文件中读取内容的方法。

[原文]:http://mydebian.blogdns.org/?p=144

How to remove space or newline characters from a string.

Well, let me first explain that in Bash a set of words separated by one or more space characters is a very common thing because it is very easy to split and work with it. Thus, there are very little cases where you could need to remove all the space characters.

However, here is a little and simple example of how could you do that:

$ echo "a b c d" | sed 's/ //g'
abcd

Simple enough, eh?

If the text to be modified is already stored in a variabile you can even use bashparameter substitution:

$ string="a b c d"
$ echo ${string// /}
abcd

Quite better!

And what if we want to remove newline characters?

The answer unfortunately is not that easy seeing that:

$ echo -e "a b c/nd e f" | sed 's//n//g'
a b c
d e f

doesn’t bring to the desired result. In fact, if we want to remove newline characters from a string we need to manually place each line into the pattern space and then remove the wanted element; here is how we can do it:

$ echo -e "a/nb/nc/nd/ne/nf" | sed '/^.*$/N;s//n//g'
ab
cd
ef

This is not yet the final result: only one newline every two is removed.
Here is how it works:

  • /^.*$/matches all the strings composed by zero or more of any character (.*) and starting/ending with the line
  • /Nstore the matched string to the pattern space and get the next
  • s/substitute
  • /n/newline character
  • //with nothing
  • /gglobally

The final solution for newline characters removal is:

$ echo -e "a/nb/nc/nd/ne/nf" | sed ':start /^.*$/N;s//n//g; t start'

which involvesspaghetti code(start is a label andt startis just a goto).

If the input is a file there is nicer way:

#!/bin/bash result=""; while read line; do result="$result $line"; done < myfile


PS:

echo -e "a/nb/nc/nd/ne/nf" | tr -d "/n"

does the trick also

C - Brackets Stack Query / Time Limit: 3 sec / Memory Limit: 1024 MiB Score : 300 points Problem Statement A string T is called a good bracket sequence if and only if it satisfies the following condition: T can be made into an empty string by repeating the following operation zero or more times: Choose () contained in T as a (contiguous) substring and remove it. For example, (), (()()), and the empty string are good bracket sequences, but )()( and ))) are not good bracket sequences. There is a string S. Initially, S is an empty string. Process Q queries in the order they are given. After each query, determine whether S is a good bracket sequence. There are two types of queries: 1 c: A character c is given. c is either ( or ). Append c to the end of S. 2: Remove the last character of S. It is guaranteed that S is not an empty string at this time. Constraints 1≤Q≤8×10 5 c in queries of the first type is ( or ). It is guaranteed that S is not empty when a query of the second type is given. Q is an integer. Input The input is given from Standard Input in the following format, where query i ​ denotes the i-th query. Q query 1 ​ query 2 ​ ⋮ query Q ​ Each query is given in one of the following two formats: 1 c 2 Output Output Q lines. The i-th line should contain Yes if the string S immediately after processing the i-th query is a good bracket sequence, and No otherwise. Sample Input 1 Copy 8 1 ( 2 1 ( 1 ) 2 1 ( 1 ) 1 ) Sample Output 1 Copy No Yes No Yes No No No Yes S immediately after processing the 1st query is (, which is not a good bracket sequence. S immediately after processing the 2nd query is an empty string, which is a good bracket sequence. S immediately after processing the 3rd query is (, which is not a good bracket sequence. S immediately after processing the 4th query is (), which is a good bracket sequence. S immediately after processing the 5th query is (, which is not a good bracket sequence. S immediately after processing the 6th query is ((, which is not a good bracket sequence. S immediately after processing the 7th query is ((), which is not a good bracket sequence. S immediately after processing the 8th query is (()), which is a good bracket sequence.c++
10-20
(c++题解,代码运行时间小于200ms,内存小于64MB,代码不能有注释)It’s time for the company’s annual gala! To reward employees for their hard work over the past year, PAT Company has decided to hold a lucky draw. Each employee receives one or more tickets, each of which has a unique integer printed on it. During the lucky draw, the host will perform one of the following actions: Announce a lucky number x, and the winner is then the smallest number that is greater than or equal to x. Ask a specific employee for all his/her tickets that have already won. Declare that the ticket with a specific number x wins. A ticket can win multiple times. Your job is to help the host determine the outcome of each action. Input Specification: The first line contains a positive integer N (1≤N≤10 5 ), representing the number of tickets. The next N lines each contains two parts separated by a space: an employee ID in the format PAT followed by a six-digit number (e.g., PAT202412) and an integer x (−10 9 ≤x≤10 9 ), representing the number on the ticket. Then the following line contains a positive integer Q (1≤Q≤10 5 ), representing the number of actions. The next Q lines each contain one of the following three actions: 1 x: Declare the ticket with the smallest number that is greater than or equal to x as the winner. 2 y: Ask the employee with ID y all his/her tickets that have already won. 3 x: Declare the ticket with number x as the winner. It is guaranteed that there are no more than 100 actions of the 2nd type (2 y). Output Specification: For actions of type 1 and 3, output the employee ID holding the winning ticket. If no valid ticket exists, output ERROR. For actions of type 2, if the employee ID y does not exist, output ERROR. Otherwise, output all winning ticket numbers held by this employee in the same order of input. If no ticket wins, output an empty line instead. Sample Input: 10 PAT000001 1 PAT000003 5 PAT000002 4 PAT000010 20 PAT000001 2 PAT000008 7 PAT000010 18 PAT000003 -5 PAT102030 -2000 PAT000008 15 11 1 10 2 PAT000008 2 PAT000001 3 -10 1 9999 1 -10 3 2 1 0 3 1 2 PAT000001 3 -2000 Sample Output: PAT000008 15 ERROR ERROR PAT000003 PAT000001 PAT000001 PAT000001 1 2 PAT102030
08-12
**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值